दिलचस्प पोस्ट
WebBrowser नियंत्रण में JavaScript त्रुटि अक्षम करें Django में एक या क्वेरी फ़िल्टर को गतिशील रूप से कैसे लिखें? window.onload बनाम body.onload बनाम दस्तावेज़। अभी उनके सूचकांक को जानने के कई तत्वों तक पहुंचें जावा में अपरिवर्तनीय वर्ग की अंतिम घोषणा क्यों की जाएगी? जार में लोड गुण फ़ाइल? स्विफ्ट के साथ सेग्यू के साथ डेटा भेज रहा है SQL कथन के साथ प्रतिशत की गणना कैसे करें Object_id असाइनमेंट कैसे काम करता है? डुप्लिकेट कुंजी त्रुटियों को सुरक्षित रूप से insert_many का उपयोग करने से कैसे अनदेखा करें जावा पर Regex दिनांक स्वरूप मान्यकरण छवि, sdcard में सहेजी गई, एंड्रॉइड के गैलरी ऐप में दिखाई नहीं देती मैं कैसे सीपीयू में सीपीयू प्रोग्राम उत्पन्न कर सकता हूँ? एंड्रॉइड पर एचटीटीपी कनेक्शन टाइमआउट काम नहीं कर रहा है क्या const_cast सुरक्षित है?

जावा प्रोग्राम में अजीब फ्लोटिंग-पॉइंट व्यवहार

मेरे प्रोग्राम में मेरे पास 25 डबल मानों वाला एक सरणी है 0.04 जब मैं इन मानों को एक पाश में जोड़ता हूं, तो मुझे निम्न परिणाम मिलते हैं:

0.0 + 0.04 = 0.04 0.04 + 0.04 = 0.08 0.08 + 0.04 = 0.12 0.12 + 0.04 = 0.16 0.16 + 0.04 = 0.2 0.2 + 0.04 = 0.24000000000000002 0.24000000000000002 + 0.04 = 0.28 0.28 + 0.04 = 0.32 0.32 + 0.04 = 0.36 0.36 + 0.04 = 0.39999999999999997 0.39999999999999997 + 0.04 = 0.43999999999999995 0.43999999999999995 + 0.04 = 0.4799999999999999 0.4799999999999999 + 0.04 = 0.5199999999999999 0.5199999999999999 + 0.04 = 0.5599999999999999 0.5599999999999999 + 0.04 = 0.6 0.6 + 0.04 = 0.64 0.64 + 0.04 = 0.68 0.68 + 0.04 = 0.7200000000000001 0.7200000000000001 + 0.04 = 0.7600000000000001 0.7600000000000001 + 0.04 = 0.8000000000000002 0.8000000000000002 + 0.04 = 0.8400000000000002 0.8400000000000002 + 0.04 = 0.8800000000000002 0.8800000000000002 + 0.04 = 0.9200000000000003 0.9200000000000003 + 0.04 = 0.9600000000000003 

पृथ्वी पर ऐसा क्यों हो सकता है ?!

वेब के समाधान से एकत्रित समाधान "जावा प्रोग्राम में अजीब फ्लोटिंग-पॉइंट व्यवहार"

प्रोग्रामिंग भाषाओं में अस्थायी-बिंदु मूल्यों के लिए सबसे आम भंडारण – आईईईई एकल और युगल – अधिकतर दशमलव भागों के लिए सटीक प्रतिनिधित्व नहीं है

इसका कारण यह है कि वे द्विआधारी फ्लोटिंग-प्वाइंट प्रारूप में मूल्यों को जमा करते हैं, बजाय दशमलव फ्लोटिंग-प्वाइंट प्रारूप। केवल आंशिक मूल्यों का प्रतिनिधित्व किया जा सकता है, जो वास्तव में दो की नकारात्मक शक्तियों के योग हैं। जैसे नंबर:

  • 0.5 (2 ^ -1)
  • 0.125 (2 ^ -3)
  • 0.625 (2 ^ -1 + 2 ^ -3)

आदि।

आप जो देख रहे हैं वह तथ्य यह है कि 0.96 जैसी संख्याओं के प्रतिनिधित्व बिल्कुल ठीक नहीं हैं, क्योंकि वे दो की नकारात्मक शक्तियों के योग के रूप में व्यक्त नहीं हैं। इस प्रकार, जब एक दशमलव अंश के रूप में पूर्ण परिशुद्धता के साथ मुद्रित किया जाता है, तो वे मूल मान से मेल नहीं खाएंगे।

यह भी देखें " क्या हर कंप्यूटर वैज्ञानिक को फ़्लोटिंग प्वाइंट के बारे में पता होना चाहिए "

अन्य उत्तरों में बताया गया है कि, लेकिन इसे कैसे न टालना।

कई समाधान हैं:

  • स्केलिंग: यदि आपके सभी नंबर 0.01 (उदाहरण के लिए) के गुणक हैं, तो सब कुछ 100 से गुणा करें और पूर्णांक अंकगणितीय (जो कि सटीक है) का उपयोग करें।
  • संख्यात्मक प्रकार: यदि आपकी भाषा में संख्यात्मक प्रकार (जैसे SQL में एक numeric प्रकार) है, तो आप इसका उपयोग कर सकते हैं।
  • अनियंत्रित सटीक राशनः जीएमपी जैसे एक बिग्नम पुस्तकालय का उपयोग करें, जो आपको इन संख्याओं को दो पूर्णांक के अनुपात के रूप में दर्शाने की अनुमति देता है।
  • दशमलव फ्लोटिंग प्वाइंट: यदि आपके पास आईईईई -754 आर में एक डेसीमल फ्लोटिंग प्वाइंट है, तो आप इसका इस्तेमाल कर सकते हैं।

आप जावा बिगडीकल क्लास को फ्लोट्स और डबल्स के विकल्प के रूप में देख सकते हैं।