2012-10-11 40 views
6

मुझे पता है कि पूर्णांक विभाजन हमेशा एक ही उत्तर को फ़्लोटिंग पॉइंट परिणाम के छंटनी के रूप में वापस कर देगा यदि संख्या दोनों सकारात्मक हैं। क्या यह सच है अगर उनमें से एक या दोनों नकारात्मक हैं?इंटीजर डिवीजन: एक // बी == int (ए/बी) सभी पूर्णांक ए, बी के लिए सच है?

मुझे यह जानने के लिए उत्सुकता थी कि क्या एक पूर्णांक विभाजन अभिव्यक्ति थी जो पाइथन 2 और पायथन 3 (और हाँ, मुझे from __future__ import division) के बारे में पता है।

पीएस आइए पल के लिए फ़्लोटिंग पॉइंट ओवरफ्लो को अनदेखा करें।

+1

* "एक पूर्णांक विभाजन अभिव्यक्ति है कि अजगर 2 और में एक ही परिणाम वापसी होगी अजगर में पूर्णांक हैं पायथन 3 "* फिर आओ? – NullUserException

+1

@NullUserException, पायथन 3 में यदि आप दो पूर्णांक को विभाजित करने के लिए '/' का उपयोग करते हैं तो आपको एक फ़्लोटिंग पॉइंट परिणाम मिलेगा। यह पाइथन 2 में एक बड़ा बदलाव है। पुराने व्यवहार प्राप्त करने के लिए अब '//' आवश्यक है। –

+0

मुझे अभी भी समझ में नहीं आता है कि वे एक फ्लोट पर ऑटो अपकास्ट क्यों करते हैं .... मुझे मूर्खतापूर्ण लगता है ... मेरा मतलब है 'int/int = int' सीएस का मूल सिद्धांत है ... –

उत्तर

9

यह अजगर 3 में सच नहीं है, और तुम अपने आप के लिए यह परीक्षण कर सकते हैं:

>>> int(-1/3) == -1//3 
False 

पूर्णांक विभाजन और a के सापेक्ष और b देने q (भागफल) और r (शेष) क्रमश: हमेशा संख्या वापस आ जाएगी जो b*q + r == a और (a*b)>0 == q>0 (यानी a*b और q समान संकेत है) और abs(r) < abs(q) को संतुष्ट करता है। अभिव्यक्ति int(q) बसएक फ़्लोटिंग पॉइंट नंबर है, तो हमेशा 0 की ओर घूमती है।

यह हमेशा अजगर 2 जब तक आप from __future__ import division कर के लिए सही हो जाएगा, लेकिन है कि क्योंकि a/b == a//ba अगर और b 2.

+0

'>>> int (-1/3) == -1 // 3' ->' सही 'मुझे पता चला कि जब मैं इसे py26 में कोशिश करता था तो वे सच थे ... –

+0

@ जोरनबेस्ले - ऐसा इसलिए है क्योंकि पायथन 2.6 में 'ए/बी == ए // बी' अगर' ए' और 'बी' पूर्णांक हैं। – Omnifarious

+0

@ जोरन बेस्ले क्योंकि पाइथन 2 में, '/' दो पूर्णांक ऑपरेटरों के साथ सटीक रूप से '//' करता है। हम यहां पाइथन 3 (संगतता) के बारे में बात कर रहे हैं, और पायथन 3 में वे भिन्न हैं। – delnan

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