जो आप अनुभव कर रहे हैं वह मूल फ़्लोटिंग पॉइंट राउंडिंग त्रुटि है।
हम द्विआधारी संख्याओं की प्रकृति के कारण कुछ त्रुटि के बिना 0.1 का प्रतिनिधित्व नहीं कर सकते हैं। WolframAlpha reports दशमलव 0.1 बराबर द्विआधारी ~ 0.00011001100110011 ... ध्यान दें कि इसे बाइनरी संख्या प्रणाली में कैसे पूर्ण रूप से प्रदर्शित नहीं किया जा सकता है? इसका मतलब है कि हमें एक कट ऑफ पॉइंट पर निर्णय लेना है जिस पर इस नंबर की गणना करना बंद करना है अन्यथा हम हमेशा यहां रहेंगे।
यह एक त्रुटि प्रस्तुत करता है। और यह त्रुटि संचित हो गई है क्योंकि कोड संख्याओं को एक साथ जोड़ता है जिसके परिणामस्वरूप आपकी राशि के अंत में एक अविश्वसनीय रूप से छोटी मात्रा में जोड़ा जाता है। यह सुनिश्चित करता है कि योग कभी भी 0.3 नहीं होगा, जो IF
परीक्षण की तलाश में है।
कुछ दशमलव संख्या, हालांकि, बाइनरी में सटीक रूप से प्रतिनिधित्व किया जा सकता है जैसे कि dec 0.5 = bin 0.1 और dec 0.25 = bin 0.01।
We can demonstrate this 0.5 = (0.25 + 0.25) का उपयोग कर अपने मूल कोड के समान ही।
इस पर आगे पढ़ने के लिए मैं The Floating-Point Guide की अनुशंसा करता हूं।
यह फ़्लोटिंग पॉइंट नंबरों की अवधारणा का एक अच्छा अवलोकन प्रदान करता है और गणना में त्रुटियां कैसे उत्पन्न हो सकती हैं। जावास्क्रिप्ट पर एक अनुभाग भी है जो दर्शाता है कि आप जिस गोलियों की त्रुटियों का सामना कर रहे हैं उन्हें कैसे दूर किया जाए।
स्रोत
2011-09-30 09:16:27
देखें http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – mtrw
और, विशेष रूप से जावास्क्रिप्ट में, http://stackoverflow.com/questions/4088590/0-43-इन-जावास्क्रिप्ट-नहीं-1-2-its-1-20000000002-क्या हो रहा है –
शायद आपको एक प्रश्न पूछने से पहले अक्सर पूछे जाने वाले प्रश्नों की सलाह का पालन करना चाहिए जो पहले से ही एक गजियन बार पूछे जा चुके हैं । – paxdiablo