2015-04-22 12 views
5

क्या कोई मुझे बता सकता है कि निम्नलिखित कथन क्यों गलत है?सी # ऑपरेटर के साथ अजीब व्यवहार

bool myBoolean = .6 + .3 + .1 == .1 + .3 + .6; // false 

यह जावास्क्रिप्ट और सी ++ में भी वही काम करता है।

+1

फ्लोटिंग पॉइंट अंकगणित? –

+0

किसी नोट के रूप में, किसी भी अंकगणितीय के बाद फ्लोट समानता के लिए परीक्षण आमतौर पर एक बुरा विचार – Sebi

+1

सही प्रकार का उपयोग करें 'दशमलव':' bool myBoolean = .6m + .3m + .1m == .1m + .3m + .6m; ' –

उत्तर

7

एनबी। मैं इस सवाल का जवाब दे रहा हूं क्योंकि इसे सी ++

फ्लोट प्रतिनिधित्व त्रुटियों के कारण, सी ++ में उपरोक्त उपज झूठी है क्योंकि दो फ्लोट संख्या पूरी तरह से बराबर नहीं हैं।

उदा। 0.1 के लिए आंतरिक प्रतिनिधित्व है कि मूल्य के करीब है, लेकिन नहीं वास्तव में यह

enter image description here

एक ही सी # के लिए आयोजित करता है।

मुझे हर चल बिन्दु गणित के साथ काम कर प्रोग्रामर पढ़ना चाहिए कि (imho) एक प्रसिद्ध दस्तावेज़ लिंक करने की अनुमति दें: What Every Computer Scientist Should Know About Floating-Point Arithmetic

0

] कभी भी Floating-Point Arithmetic पर भरोसा है। रूपांतरण के दौरान आपको सटीक नुकसान हो सकता है। यही कारण है कि परिणाम झूठा है। मेरा सुझाव है कि आप दशमलव प्रकार का उपयोग करने का प्रयास करें जो दशमलव नोटेशन में संख्याओं को संग्रहीत करता है। इस प्रकार आपकी संख्या सटीक रूप से प्रतिनिधित्व योग्य होगी।

enter image description here

संबंधित मुद्दे