पायथन के कार्यान्वयन के लिए वास्तव में विशिष्ट नहीं है, लेकिन दशमलव स्ट्रिंग फ़ंक्शन के लिए किसी भी फ्लोट पर लागू होना चाहिए।
एक फ्लोटिंग पॉइंट नंबर अनिवार्य रूप से एक बाइनरी नंबर है, लेकिन महत्वपूर्ण आंकड़ों की एक निश्चित सीमा के साथ वैज्ञानिक अंकन में।
किसी भी संख्या का व्युत्क्रम एक प्रमुख संख्या कारक है जिसे आधार के साथ साझा नहीं किया जाता है, हमेशा एक आवर्ती बिंदु बिंदु प्रतिनिधित्व होता है। उदाहरण के लिए 1/7 में एक प्रमुख कारक है, 7, जिसे 10 के साथ साझा नहीं किया गया है, और इसलिए एक आवर्ती दशमलव प्रतिनिधित्व है, और वही 1/10 के लिए सही है जिसमें प्रमुख कारक 2 और 5 हैं, बाद वाला 2 के साथ साझा नहीं किया जा रहा है ; इसका मतलब यह है कि 0.1 बिंदु बिंदु के बाद बिट्स की एक परिमित संख्या द्वारा बिल्कुल प्रतिनिधित्व नहीं किया जा सकता है।
चूंकि 0.1 में कोई सटीक प्रतिनिधित्व नहीं है, एक फ़ंक्शन जो एक दशमलव बिंदु स्ट्रिंग के लिए सन्निकटन को परिवर्तित करता है, आमतौर पर कुछ मानों को अनुमानित करने की कोशिश करेगा ताकि उन्हें 0.1000000000004121 जैसे अनपेक्षित परिणाम न मिलें।
चूंकि फ्लोटिंग पॉइंट वैज्ञानिक संकेतन में है, इसलिए आधार की शक्ति से कोई गुणन केवल संख्या के घातांक भाग को प्रभावित करता है। उदाहरण के लिए 1.231e + 2 * 100 = 1.231e + 4 दशमलव संकेतन के लिए, और इसी तरह, 1.00101010e11 * 100 = 1.00101010e101 बाइनरी नोटेशन में। यदि मैं आधार की गैर-शक्ति से गुणा करता हूं, तो महत्वपूर्ण अंक भी प्रभावित होंगे। उदाहरण के लिए 1.2e1 * 3 = 3.6e1
उपयोग किए गए एल्गोरिदम के आधार पर, यह केवल महत्वपूर्ण आंकड़ों के आधार पर आम दशमलव का अनुमान लगाने की कोशिश कर सकता है। बाइनरी में 0.1 और 0.4 दोनों के समान आंकड़े हैं, क्योंकि उनकी फ़्लोट्स अनिवार्य रूप से (8/5) (2 ^ -4) और (8/5) के ट्रंकेशन हैं क्रमशः (2 ^ -6) के हैं। यदि एल्गोरिथ्म 8/5 सिगफिग पैटर्न को दशमलव 1.6 के रूप में पहचानता है, तो यह 0.1, 0.2, 0.4, 0.8 आदि पर काम करेगा। इसमें अन्य संयोजनों के लिए जादू सिगफिग पैटर्न भी हो सकते हैं, जैसे कि फ्लोट 3 को फ्लोट 10 से विभाजित किया गया है। और अन्य जादू पैटर्न सांख्यिकीय रूप से 10 तक विभाजन द्वारा गठित होने की संभावना है।
3 * 0.1 के मामले में, अंतिम कुछ महत्वपूर्ण आंकड़े संभवतः फ्लोट 3 को फ्लोट 10 से विभाजित करने से अलग होंगे, जिससे एल्गोरिथ्म सटीक नुकसान के लिए अपनी सहनशीलता के आधार पर 0.3 स्थिर के लिए जादू की संख्या को पहचानने में विफल हो जाएगा।
संपादित करें:
https://docs.python.org/3.1/tutorial/floatingpoint.html
दिलचस्प है, कई अलग-अलग दशमलव संख्याएं हैं जो समान निकटतम बाइनरी अंश को साझा करते हैं। उदाहरण के लिए, संख्याएँ 0.1 और 0.10000000000000001 और 0.1000000000000000055511151231257827021181583404541015625, सभी 3602879701896397/2/55 द्वारा सन्निकट हैं। चूंकि ये सभी दशमलव मान एक ही सन्निकटन को साझा करते हैं, उनमें से किसी एक को भी प्रदर्शित किया जा सकता है, जबकि अभी भी इनवॉइस विकसित नहीं कर रहा है। ) == एक्स।
सटीक नुकसान के लिए कोई सहिष्णुता नहीं है, अगर फ्लोट x (0.3) फ्लोट y (0.1 * 3) के बराबर नहीं है, तो repr (x) repr (y) के बराबर नहीं है।