2010-01-07 8 views
7

अजगर की // "पूर्णांक विभाजन" ऑपरेटर मुझे हैरान कर दिया, आज:फिक्स्ड क्वांटेंट की तुलना में इंटीजर डिवीजन: यह आश्चर्यजनक परिणाम क्यों है?

>>> math.floor(11/1.1) 
10.0 
>>> 11//1.1 
9.0 

documentation लिखा है "(फिदा) x और y के भागफल"। तो, math.floor (11/1.1) 10 के बराबर क्यों है, लेकिन 11 // 1.1 बराबर 9 है?

+5

http://mail.python.org/pipermail/python-dev/2007-January/070707.html – miku

+0

पायथन 2-बनाम-3 विभाजन अंतर के लिए कैनोलिक सवाल यह है कि मैं विभाजन को फ़्लोटिंग पॉइंट कैसे कर सकता हूं पायथन में? डिवीजन 0 से नीचे घूमता रहता है] (https://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python-division-keeps-rounding) – smci

उत्तर

5

क्योंकि 1.1 को बाइनरी रूप में बिल्कुल प्रदर्शित नहीं किया जा सकता है; अनुमान 1.1 से अधिक लिटलर है - इसलिए विभाजन परिणाम थोड़ा छोटा है।

निम्नलिखित का प्रयास करें:

अजगर 2, कंसोल पर प्रकार के तहत:

>>> 1.1 
1.1000000000000001 

अजगर 3.1 में, सांत्वना 1.1 प्रदर्शित करेगा, लेकिन आंतरिक रूप से, यह अभी भी एक ही नंबर है।

लेकिन:

>>> 11/1.1 
10.0 

gnibbler बताते हैं, यह तैरता की उपलब्ध परिशुद्धता सीमा के भीतर "आंतरिक राउंडिंग" का नतीजा है। और जैसा कि MYYN अपनी टिप्पणी में इंगित करता है, // को यथासंभव को संरक्षित करने के लिए math.floor() से फ़्लोर डिवीजन परिणाम की गणना करने के लिए एक अलग एल्गोरिदम का उपयोग करता है।

यदि आपको इस परिशुद्धता की आवश्यकता है तो Decimal प्रकार का उपयोग करें।

+0

लेकिन पायथन '11.0/1.1 == 10.0' के अनुसार सत्य – sth

+1

जैसा कि हम जानते हैं 1.1 1.1000000000000001 के रूप में संग्रहीत है, इसलिए पाइथन में परिणाम 11.0/1.1 9.9 99 99 99 99 99 999 9 0 9 0 9 0 9 0 9 0 9 0 9 है, लेकिन इस संख्या के निकटतम फ्लोट वास्तव में 10.0 है, इसलिए ऐसा होता है कि परिणाम वास्तव में 10.0 –

+0

@Tim मैंने इसके बारे में सोचा, और मेरा मानना ​​है कि यह गणित.फ्लूर (11/1.1) और 11 // 1.1 के बीच अंतर की कुंजी है। हालांकि, जैसा कि gnibbler ने इंगित किया है, तथ्य यह है कि 1.1 को थोड़ा बड़ा संख्या द्वारा दर्शाया गया है केवल यह इंगित करता है कि गणित। फ्लोर (11/1.1) वास्तव में 9.0 होना चाहिए, जो मूल प्रश्न को अभी भी खुला छोड़ देता है। – EOL

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