क्यों 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
उत्तर
क्योंकि आप फ़्लोटिंग-पॉइंट में काम कर रहे हैं। बाइनरी फ़्लोटिंग-पॉइंट 0.1 का बिल्कुल प्रतिनिधित्व नहीं कर सकता है।
यहाँ देखें: What Every Programmer Should Know About Floating-Point Arithmetic
रियल संख्या अनंत है। कंप्यूटर बिट्स की सीमित संख्या (32 बिट्स, 64 बिट्स) के साथ काम कर रहे हैं। नतीजतन कंप्यूटर द्वारा फ़्लोटिंग-पॉइंट अंकगणित सभी वास्तविक संख्याओं का प्रतिनिधित्व नहीं कर सकता है। 0.1 इन संख्याओं में से एक है।
ध्यान दें कि रूबी से संबंधित कोई समस्या नहीं है, लेकिन सभी प्रोग्रामिंग भाषाओं के लिए है क्योंकि यह कंप्यूटर वास्तविक संख्याओं का प्रतिनिधित्व करने के तरीके से आता है।
इस पेपर को अक्सर इस तरह के सवालों के जवाब में उद्धृत किया जाता है, लेकिन यह वास्तव में शुरुआती लोगों के लिए लक्षित नहीं है। –
मैं सहमत हूं लेकिन मुझे इस विषय पर एक और आसान दस्तावेज़ नहीं पता है। क्या आप ? –
इस प्रश्न पर मेरा उत्तर कहीं और देखें। –
Float
रों हमेशा ठीक वैसे ही प्रदर्शित नहीं किया जा सकता, देख
What Every Programmer Should Know About Floating-Point Arithmetic
इस पेपर को अक्सर इस तरह के सवालों के जवाब में उद्धृत किया जाता है, लेकिन यह वास्तव में शुरुआती लोगों के लिए लक्षित नहीं है। –
हां, लेकिन मैं यह तय करने के लिए ओपी को छोड़ दूंगा कि पेपर उसके लिए अच्छा है या नहीं, उसके लिए निर्णय लेने के बजाय। –
यहाँ फ्लोटिंग प्वाइंट के बारे में एक अलग पृष्ठ है: http://docs.python.org/tutorial/floatingpoint.html। यह पायथन डॉक्स से है, लेकिन यह उन सभी भाषाओं के लिए सच है जो निश्चित आकार के बाइनरी फ्लोट का उपयोग करते हैं।
डबल-परिशुद्धता में, 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 महत्वपूर्ण दशमलव अंकों तक गोल कर रहा है।
हालांकि @ 32 बिटकिड की रूबी (ऊपर टिप्पणी से) 17 अंकों के आसपास लगती है। आप किस रूबी का उपयोग कर रहे हैं? –
- 1. डबल.परसेड डबल 99 99 99 99 99 99 99 99 10000000000000000 क्यों बना रहा है?
- 2. 99 99 99 99 99 99 99 99 जावास्क्रिप्ट में 10000000000000000 में क्यों परिवर्तित किया गया है?
- 3. गुणा करते समय 0.9 99 99 99 99 99 1.0 तक गोल किया जा सकता है?
- 4. संख्या -39 99 99 99 9 1 कुछ तार्किक है?
- 5. सी 99
- 6. आईएसओ सी 99
- 7. पी 99 और सी 99 बनाम सी 11
- 8. गिट पुश 99%
- 9. MySQL गणना समस्याएं: 1 + 1 = 1.99 99 99 999
- 10. सी 99 + सी ++ (जीसीसी)
- 11. पी 99 विलंबता क्या है?
- 12. यदि इसकी संबंधित छाया प्रविष्टि 99 99 99 है तो मैं/etc/passwd से लाइन कैसे खींच सकता हूं?
- 13. सी 11 बनाम सी 99
- 14. सी 99 सहयोगीता - यह कहां निर्दिष्ट है?
- 15. क्या सी 99 प्रीप्रोसेसर ट्यूरिंग पूरा है?
- 16. सी/सी 99/सी ++/सी ++ एक्स/जीएनयू सी/जीएनयू सी 99
- 17. समारोह की लागू घोषणा objc_getAssociatedObject सी 99
- 18. ट्विटर एपीआई: अनुयायियों को प्राप्त करें +99
- 19. पाइथन में दशमलव ('0')> 99 99.0 सच क्यों है?
- 20. मेरा बटन 1 99 0 से ऐसा क्यों दिखता है?
- 21. डिस्प्ले: कोई भी बनाम दृश्यता: छुपा बनाम टेक्स्ट-इंडेंट: 99 99 स्क्रीन रीडर प्रत्येक के साथ कैसे व्यवहार करता है?
- 22. संरचना के भीतर बेनामी संघ सी 99 में नहीं है?
- 23. जीएसएम '99' लौटने पर सिग्नल की शक्ति कैसे निर्धारित करें?
- 24. वाराचर पूरी तरह से 1 99 0 की तरह है?
- 25. nginx त्रुटि: (99: अनुरोध असाइन नहीं कर सकते पता)
- 26. सी 99 + में नामित प्रारंभिक और malloc संयोजन?
- 27. सी 99 मिश्रित घोषणाओं और ओपन सोर्स परियोजनाओं में कोड?
- 28. betweeen सी (99) और सी ++ (11) असंगत मतभेद क्या हैं?
- 29. सी 8 9 बनाम सी 99 जीसीसी कंपाइलर
- 30. त्रुटि आईओएस 4.1 में होती है (*** त्रुटि: FigCreateCGImageFromJPEG लौटा -12905। इनपुट (शून्य) 49 99 9 2 बाइट था।)!
मेरे लिए '4.2% 2 == 0.20000000000000018' (रूबी 1.9.2) –
आप यहां आसान विश्लेषण पा सकते हैं: http://stackoverflow.com/questions/9136860/how-to-check- निर्भरता-of-floats/9136907 # 9136907 – Gangnus