2012-01-09 10 views
5

क्यों 4.1% 2 0.099 99 99 99 99 99 996 देता है? लेकिन 4.2% 2 == 0.2।रूबी का उपयोग करते हुए 4.1% 2 0.099 99 99 99 99 99 996 क्यों लौटाता है? लेकिन 4.2% 2 == 0.2

+1

मेरे लिए '4.2% 2 == 0.20000000000000018' (रूबी 1.9.2) –

+0

आप यहां आसान विश्लेषण पा सकते हैं: http://stackoverflow.com/questions/9136860/how-to-check- निर्भरता-of-floats/9136907 # 9136907 – Gangnus

उत्तर

0

क्योंकि आप फ़्लोटिंग-पॉइंट में काम कर रहे हैं। बाइनरी फ़्लोटिंग-पॉइंट 0.1 का बिल्कुल प्रतिनिधित्व नहीं कर सकता है।

5

यहाँ देखें: What Every Programmer Should Know About Floating-Point Arithmetic

रियल संख्या अनंत है। कंप्यूटर बिट्स की सीमित संख्या (32 बिट्स, 64 बिट्स) के साथ काम कर रहे हैं। नतीजतन कंप्यूटर द्वारा फ़्लोटिंग-पॉइंट अंकगणित सभी वास्तविक संख्याओं का प्रतिनिधित्व नहीं कर सकता है। 0.1 इन संख्याओं में से एक है।

ध्यान दें कि रूबी से संबंधित कोई समस्या नहीं है, लेकिन सभी प्रोग्रामिंग भाषाओं के लिए है क्योंकि यह कंप्यूटर वास्तविक संख्याओं का प्रतिनिधित्व करने के तरीके से आता है।

+1

इस पेपर को अक्सर इस तरह के सवालों के जवाब में उद्धृत किया जाता है, लेकिन यह वास्तव में शुरुआती लोगों के लिए लक्षित नहीं है। –

+0

मैं सहमत हूं लेकिन मुझे इस विषय पर एक और आसान दस्तावेज़ नहीं पता है। क्या आप ? –

+0

इस प्रश्न पर मेरा उत्तर कहीं और देखें। –

1

Float रों हमेशा ठीक वैसे ही प्रदर्शित नहीं किया जा सकता, देख

What Every Programmer Should Know About Floating-Point Arithmetic

+0

इस पेपर को अक्सर इस तरह के सवालों के जवाब में उद्धृत किया जाता है, लेकिन यह वास्तव में शुरुआती लोगों के लिए लक्षित नहीं है। –

+1

हां, लेकिन मैं यह तय करने के लिए ओपी को छोड़ दूंगा कि पेपर उसके लिए अच्छा है या नहीं, उसके लिए निर्णय लेने के बजाय। –

1

यहाँ फ्लोटिंग प्वाइंट के बारे में एक अलग पृष्ठ है: http://docs.python.org/tutorial/floatingpoint.html। यह पायथन डॉक्स से है, लेकिन यह उन सभी भाषाओं के लिए सच है जो निश्चित आकार के बाइनरी फ्लोट का उपयोग करते हैं।

1

डबल-परिशुद्धता में, 4.1 = 4.0 99 99 99 99 99 99 996447286321199499070644378662109375 और 4.2 = 4.20000000000000017763568394002504646778106689453125। दूसरे शब्दों में, दशमलव 4.1 के लिए बाइनरी सन्निकटन अपेक्षा से थोड़ा कम है, और दशमलव 4.2 के लिए बाइनरी अनुमान कुछ और है।

अब 0.20000000000000017 क्यों ... 0.2 से 0.2 लेकिन 0.099 99 99 99 99 99 99644 ... 0.1 के आसपास नहीं? रूबी शायद सभी आउटपुट को 15 महत्वपूर्ण दशमलव अंकों तक गोल कर रहा है।

+0

हालांकि @ 32 बिटकिड की रूबी (ऊपर टिप्पणी से) 17 अंकों के आसपास लगती है। आप किस रूबी का उपयोग कर रहे हैं? –

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