2013-10-17 11 views
6

गणितीय रूप से, 0.9 पुनरावर्ती 1 के बराबर दिखाया जा सकता है। हालांकि, यह प्रश्न अनंत, अभिसरण या इसके पीछे गणित के बारे में नहीं है।0.9 आवर्ती हमेशा बराबर नहीं है 1

उपर्युक्त धारणा निम्नलिखित के साथ सी # में युगल का उपयोग करके प्रदर्शित की जा सकती है।

var oneOverNine = 1d/9d; 
var resultTimesNine = oneOverNine * 9d; 

ऊपर दिए गए कोड का उपयोग करके, (resultTimesNine == 1d) सत्य का मूल्यांकन करता है।

इसके बजाय decimals का उपयोग करते समय, मूल्यांकन झूठा पैदा करता है, फिर भी, मेरा सवाल डबल और दशमलव की असमान परिशुद्धता के बारे में नहीं है।

चूंकि किसी भी प्रकार में अनंत परिशुद्धता नहीं है, तो कैसे और क्यों समान समानता बनाए रखता है जहां दशमलव नहीं होता है? oneOverNine वैरिएबल मेमोरी में संग्रहीत तरीके के तरीके के संबंध में, उपर्युक्त कोड के 'लाइनों के बीच' क्या हो रहा है?

+0

मुझे लगता है कि गोलाकार होता है। '1.0' की ओर युगल के लिए, इससे दूर तैरने के लिए। – millimoose

+1

सी #, कंपाइलर और ओएस का संस्करण क्या है? यह पूछना क्योंकि 64-बिट Win7 मशीन पर VS2010 का उपयोग करना मेरे लिए फ्लोट और युगल दोनों के लिए 'सत्य' उत्पन्न करता है, चाहे x86 या x64 कर रहा हो। –

+0

@ जोएलरोडोउ मेला प्रश्न, मेरी वर्तमान मशीन (वीएस -2010, विन 7 एक्स 64) पर, मुझे आपके जैसे ही परिणाम मिलते हैं, लेकिन दशमलव के लिए झूठा, फिर से, सटीक मतभेद, लेकिन तुलना के लिए दिलचस्प। –

उत्तर

11

यह गोल करने पर निर्भर करता है जो निकटतम प्रतिनिधित्व करने योग्य मान 1/9 तक प्राप्त करता है। कुछ भी हो सकता था। आप रॉब केनेडी के उपयोगी पृष्ठ पर प्रतिनिधित्व की समस्या की जांच कर सकते हैं: http://pages.cs.wisc.edu/~rkennedy/exact-float

लेकिन ऐसा नहीं लगता कि किसी भी तरह से डबल सटीकता प्राप्त करने में सक्षम है। यह नहीं है यदि आप 2/9, 3/9 इत्यादि के साथ प्रयास करते हैं तो आपको ऐसे मामले मिलेंगे जहां गोलिंग दूसरी तरफ जाती है। निचली पंक्ति यह है कि 1/9 बाइनरी फ्लोटिंग पॉइंट में बिल्कुल प्रतिनिधित्व योग्य नहीं है। और इसलिए गोल होता है और आपकी गणना गोल करने वाली त्रुटियों के अधीन होती है।

2

ऊपर कोड की 'लाइनों के बीच' सचमुच हो रहा है क्या, जिस तरह से oneOverNine चर स्मृति में संग्रहीत किया जाता है के संबंध में?

आप जो पूछ रहे हैं उसे IEEE 754 कहा जाता है। यह कल्पना है कि सी #, यह अंतर्निहित है। नेट रनटाइम, और अधिकांश अन्य प्रोग्रामिंग प्लेटफार्म दशमलव मानों को स्टोर और कुशलतापूर्वक उपयोग करने के लिए उपयोग करते हैं। इसका कारण यह है कि आईईईई 754 के लिए समर्थन आमतौर पर सीपीयू/चिपसेट-स्तर पर सीधे लागू किया जाता है, जिससे इसे केवल सॉफ्टवेयर में लागू किए गए वैकल्पिक विकल्प से कहीं अधिक निष्पादित किया जाता है और कंपाइलर्स बनाने के दौरान कहीं अधिक आसान होता है, क्योंकि ऑपरेशन लगभग सीधे सीपीयू निर्देशों पर मैप करेंगे ।

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