2011-11-28 17 views

उत्तर

7

कैसे a-floor(a/b)*b - a और b दोनों सकारात्मक मानते हैं?

आप कह सकते हैं कि "शेष" फ्लोट डिवीजनों के लिए उचित अवधारणा नहीं है, लेकिन मैं इसे अपने निर्णय में छोड़ दूंगा।

+0

मैं '' 99.6' के लिए 0.2' के मूल्य और '0.2' मिलती रहती है - हालांकि यह निश्चित रूप से 0 होना चाहिए बस '996% 2' 0. –

26

fmod का उपयोग करें, जो फ़्लोटिंग पॉइंट मॉड्यूलस की गणना करता है।

double remainder = fmod(a_double, another_double); 

आप fmodf बजाय प्रयोग करेंगे आप floatdouble के बजाय उपयोग करना चाहते हैं।

+0

' fmod (97.2, 0.2) 'रिटर्न' 0.2' है, यह बहुत उपयोगी नहीं है। –

+0

@ TomášZato यहां समस्या यह है कि न तो 97.2 और न ही 0.2 को _exactly_ को फ़्लोटिंग पॉइंट नंबर के रूप में प्रदर्शित किया जा सकता है। देखें [फ़्लोटिंग प्वाइंट नंबर क्यों गलत हैं?] (Http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers- गलत)। मेरे डीबगर में, मुझे '97.200000000000002' और '0.20000000000000001' तर्क के रूप में मिलता है, जिसके परिणामस्वरूप' 0.19999999999999746' होता है। आपको अपने मामले के लिए एक निश्चित बिंदु गणित पुस्तकालय की आवश्यकता हो सकती है। – DarkDust

+0

मुझे लगता है कि यह भी बताता है कि क्यों 'if (शेष == 0 || शेष == अन्य_double)' विफल रहा है, क्योंकि '0.19999999999999746'' 0.2' के बराबर नहीं है। मैं संख्याओं के बीच अंतर की तुलना करूंगा। –

संबंधित मुद्दे