क्या कोई मुझे बता सकता है कि निम्नलिखित कथन क्यों गलत है?सी # ऑपरेटर के साथ अजीब व्यवहार
bool myBoolean = .6 + .3 + .1 == .1 + .3 + .6; // false
यह जावास्क्रिप्ट और सी ++ में भी वही काम करता है।
क्या कोई मुझे बता सकता है कि निम्नलिखित कथन क्यों गलत है?सी # ऑपरेटर के साथ अजीब व्यवहार
bool myBoolean = .6 + .3 + .1 == .1 + .3 + .6; // false
यह जावास्क्रिप्ट और सी ++ में भी वही काम करता है।
एनबी। मैं इस सवाल का जवाब दे रहा हूं क्योंकि इसे सी ++
फ्लोट प्रतिनिधित्व त्रुटियों के कारण, सी ++ में उपरोक्त उपज झूठी है क्योंकि दो फ्लोट संख्या पूरी तरह से बराबर नहीं हैं।
उदा। 0.1 के लिए आंतरिक प्रतिनिधित्व है कि मूल्य के करीब है, लेकिन नहीं वास्तव में यह
एक ही सी # के लिए आयोजित करता है।
मुझे हर चल बिन्दु गणित के साथ काम कर प्रोग्रामर पढ़ना चाहिए कि (imho) एक प्रसिद्ध दस्तावेज़ लिंक करने की अनुमति दें: What Every Computer Scientist Should Know About Floating-Point Arithmetic
] कभी भी Floating-Point Arithmetic
पर भरोसा है। रूपांतरण के दौरान आपको सटीक नुकसान हो सकता है। यही कारण है कि परिणाम झूठा है। मेरा सुझाव है कि आप दशमलव प्रकार का उपयोग करने का प्रयास करें जो दशमलव नोटेशन में संख्याओं को संग्रहीत करता है। इस प्रकार आपकी संख्या सटीक रूप से प्रतिनिधित्व योग्य होगी।
फ्लोटिंग पॉइंट अंकगणित? –
किसी नोट के रूप में, किसी भी अंकगणितीय के बाद फ्लोट समानता के लिए परीक्षण आमतौर पर एक बुरा विचार – Sebi
सही प्रकार का उपयोग करें 'दशमलव':' bool myBoolean = .6m + .3m + .1m == .1m + .3m + .6m; ' –