जो आप यहां देख रहे हैं वह अनिवार्य रूप से /
और //
के साथ फर्श विभाजन के बीच अंतर का प्रभाव है।
ध्यान में रखना हमेशा भी महत्वपूर्ण है general issue with floating point arithmetic जो कि वे कैसे काम करते हैं, यह निश्चित रूप से एक निश्चित अव्यवस्था है। उन परिस्थितियों में, वास्तव में क्या चल रहा है यह जांचने के लिए decimal
मॉड्यूल का उपयोग करना हमेशा अच्छा होता है। तो चलो देखते हैं आप यहाँ क्या कर रहे:
सबसे पहले, .1
पहले से ही सटीक नहीं है:
>>> Decimal(1)/Decimal(.1)
Decimal('9.999999999999999444888487687')
>>> 1/.1
10.0
:
>>> Decimal(.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
तो, के विभाजन के वास्तविक परिणाम को देखो जैसा कि आप देख सकते हैं, /
का उपयोग कर सामान्य विभाजन आपको 10
को फ़्लोटिंग पॉइंट अंकगणित के साथ बिल्कुल नहीं देता है। लेकिन यह वास्तव में करीब है। यही कारण है कि, जब आप सामान्य फ्लोट का उपयोग करते हैं, तो आप वास्तव में वापस 10 प्राप्त करते हैं (चूंकि डिवीजन अपर्याप्तता संख्या प्रकार की अपर्याप्तता में तुरंत खो जाती है)।
फर्श विभाजन का उपयोग करते समय, परिणाम से पहले अस्पष्टता में सुधार किया जाए फिदा है, ताकि आप 9
क्यों प्राप्त होते हैं:
>>> Decimal(1) // Decimal(.1)
Decimal('9')
>>> 1/.1
10.0
ऋणात्मक संख्याओं के साथ
, फर्श प्रभाव विपरीत दिशा है, के रूप में समझाया in that other question :
>>> Decimal(1)/Decimal(-.1)
Decimal('-9.999999999999999444888487687')
>>> 1/-.1
-10.0
>>> Decimal(1) // Decimal(-.1)
Decimal('-9')
>>> 1 // -.1
-10.0
फ़्लोर डिवीजन। इस पोस्ट को देखें: http://stackoverflow.com/questions/5535206/negative-integer-division-surprising-result – Manhattan
मंजिल (1/.1) 10 के बराबर होना चाहिए हालांकि –
संभवतः एक अन्य आर्टिफैक्ट [क्या फ़्लोटिंग पॉइंट गणित टूटा हुआ है ?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –