पर मॉड्यूलो ऑपरेटर तो मैं यह पता लगाने की कोशिश कर रहा हूं कि मॉड्यूलो ऑपरेटर इतना बड़ा असामान्य मूल्य क्यों लौट रहा है।फ़्लोटिंग प्वाइंट अंकगणित - डबल टाइप
अगर मैं कोड है:
double result = 1.0d % 0.1d;
यह 0.09999999999999995
का एक परिणाम दे देंगे। मैं की 0
नोट एक मूल्य के इस समस्या को विभाजन ऑपरेटर का उपयोग मौजूद नहीं है उम्मीद करेंगे - double result = 1.0d/0.1d;
10.0
का एक परिणाम दे देंगे, जिसका अर्थ है कि शेष 0
होना चाहिए।
मुझे स्पष्ट होने दें: मुझे आश्चर्य नहीं है कि एक त्रुटि मौजूद है, मुझे आश्चर्य है कि त्रुटि बड़ी संख्या खेलने की संख्या की तुलना में बहुत कम है। 0.099 9 ~ = 0.1 और 0.1 0.1d
के रूप में परिमाण के समान क्रम पर और 1.0d
से परिमाण का केवल एक क्रम है। ऐसा नहीं है कि आप इसकी तुलना डबल.पिसिलॉन से कर सकते हैं, या कहें "इसके बराबर अगर < 0.00001 अंतर"।
मैंने निम्नलिखित पदों में निम्नलिखित पोस्ट onetwothree में, इस विषय पर StackOverflow पर पढ़ा है।
क्या कोई यह बता सकता है कि यह त्रुटि इतनी बड़ी क्यों है? भविष्य में समस्याओं में भागने से बचने के लिए कोई भी सुझाव (मुझे पता है कि मैं इसके बजाय दशमलव का उपयोग कर सकता हूं लेकिन मैं इसके प्रदर्शन के बारे में चिंतित हूं)।
संपादित करें: मुझे विशेष रूप से यह इंगित करना चाहिए कि मुझे पता है कि 0.1 infinitely repeating series of numbers in binary है - क्या इसका इसके साथ कुछ लेना देना है?
0.1000000000000000055511151231257827021181583404541015625, सटीक होने के लिए। – dan04
मैं गणना के चलने की सराहना करता हूं। एक स्पष्टीकरण - आप उल्लेख करते हैं "0 = 0.1 मॉड 0.1 के बाद, मॉड में वास्तविक त्रुटि 0.1 - 0.0 99 99 999 है ... - बहुत छोटा।" मैं इससे उलझन में हूं क्योंकि मेरा परिणाम लौटा 0.099 999 था, लेकिन वास्तविक परिणाम 0 है। वास्तविक त्रुटि 0.1 - 0.0 99 999 कैसे है? क्या आप थोड़ा और विस्तार से इस हिस्से की त्रुटि गणना को तोड़ सकते हैं? भविष्य में पाठकों के लिए पिछली टिप्पणी का जवाब देने के लिए – CrimsonX
: संपादन अनुभाग इसका उत्तर देता है। (संक्षिप्त स्पष्टीकरण: त्रुटि की अस्थिरता के कारण त्रुटि बड़ी है (देखा हुआ डेंट फ़ंक्शन) 'ए' (उदा। 10.0001) में मामूली वृद्धि परिणाम को 0 के करीब गिर जाएगी) –