Why is 2.4 not equal to 2.4? Python / NumPy -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 2 जवाब

मैं में कोडिंग के लिए नया हूँ पायथन और मुझे बहुत ही बुनियादी के साथ परेशानी हो रही है मैंने इस साइट पर एक खोज की, जो संख्या समान नहीं है, लेकिन केवल जावा से संबंधित कुछ पाया मेरे पास एक बहुत ही सरल सवाल है 2.2 = 2.2 क्यों होता है लेकिन 2.4! = 2.4? कोड नीचे प्रस्तुत किया गया है और यहां पर मुझे प्राप्त होने वाले आउटपुट का एक स्क्रीनशॉट है:

  import os आयात करें एमएमपीएमएमएम = 2.1 एमएमएक्स = 6.5 मेग्नेटिट्यूशन = एमएमएक्स .रेंज (एममिन, एमएमएक्स, 0.10) प्रिंट परिमाण x = परिमाण [1] y = 2.2 प्रिंट एक्स प्रिंट y प्रिंट एक्स == ya = परिमाण [3] बी = 2.4 प्रिंट प्रिंट बी प्रिंट एक == बी    

< फ़्लोटिंग पॉइंट को संचयित करने वाली कोई भी भाषा आमतौर पर उन्हें आईईईई 32 या 64 बिट बायनेरीज़ के रूप में संग्रहीत करेगी, जो अनिवार्य रूप से आधार 2 वैज्ञानिक संकेतन हैं, और इसलिए कभी भी " 2.1 "या" 2.4 " जैसे, अपने कोड में फ्लोटिंग पॉइंट के साथ किसी भी "==" की तुलना करने से बहुत सावधान रहें भले ही संख्याएं समान शुरू हो जाएं, तो कोई भी गणित आपरेशन गोलिंग आपको एक एलएसबी द्वारा अपने कोड को तोड़ने से रोक सकता है।

आपके उदाहरण में, एक बेहतर तरीका यह हो सकता है कि पूर्णांक का उपयोग 10x के फ़्लोटिंग बिंदु मान । आपका कोड संभवतः इस तरह से तेज़ हो जाएगा जब आपको परिणाम देने की आवश्यकता होती है तो फ़्लोटिंग बिंदुओं में परिवर्तित करें:

  आयात करें ओपी आयात करें एमएमआईएम = 21 एमएमएक्स = 65 मेगेटिशन = एमएमएक्स .रेंज (एमिन, एमएमएक्स, 1) प्रिंट परिमाण x = विशालता [ 1] y = 22 प्रिंट x प्रिंट y प्रिंट एक्स == ya = परिमाण [3] बी = 24 प्रिंट प्रिंट प्रिंट करें a == b  

यहाँ कुछ उदाहरण कोड है जो इसे दिखाता है थोड़ा स्पष्ट मैं 1/9 का उपयोग कर रहा हूं जो कि कुछ ऐसा है जो बिल्कुल आधार 2 या बेस 10 फ्लोटिंग प्वाइंट नोटेशन में व्यक्त नहीं किया जा सकता है:

  x = 1.0 / 9.0 y = 0 श्रेणी के लिए i 1,15): y + = xz = i * x प्रिंट 'y =', प्रिंट '% .20f'% y, प्रिंट 'z =', प्रिंट '% .20f'% z, प्रिंट z == y   

आउटपुट यह है:

  y = 0.11111111111111110494 z = 0.11111111111111110494 True y = 0.22222222222222220989 z = 0.22222222222222220989 सही y = 0.33333333333333331483 z = 0.33333333333333331483 यह सत्य y = 0.44444444444444441977 z = 0.44444444444444441977 यह सच है y = 0.55555555555555558023 z = 0.55555555555555558023 यह सच है y = .66666666666666674068 z = 0.66666666666666662966 झूठी y = 0.77777777777777790114 z = 0.77777777777777767909 झूठी y = 0.88888888888888906159 z = 0.88888888888888883955 झूठी y = 1.00000000000000022204 z = 1.00000000000000000000 झूठी y = 1.11111111111111138250 z = 1.11111111111111116045 झूठी y = 1.2222 2222222222254295 z = 1.22222222222222209886 फाल वाई = 1.33333333333333370341 z = 1.33333333333333325932 झूठी = 1.44444444444444486386 z = 1.44444444444444441977 गलत y = 1.55555555555555602432 z = 1.55555555555555535818 झूठी  

Comments