2012-10-11 17 views
6

Wiem, że podział całkowity zawsze zwróci tę samą odpowiedź, co obcięcie wyniku zmiennoprzecinkowego, jeśli liczby są dodatnie. Czy to prawda, jeśli jedna lub obie z nich są negatywne?Odcinek całkowity: czy // b == int (a/b) jest prawdziwe dla wszystkich liczb całkowitych a, b?

Byłem po prostu ciekawy, czy istnieje wyrażenie liczby całkowitej, które zwróci te same wyniki w Pythonie 2 i Pythonie 3 (i tak, wiem o from __future__ import division).

P.S. Zignorujmy teraz przepełnienie zmiennoprzecinkowe.

+1

*”an podział wyrażenie całkowitą, która zwraca te same rezultaty w Pythonie 2 i Python 3 "* Przyjdź ponownie? – NullUserException

+1

@NullUserException, w Pythonie 3, jeśli użyjesz '/' do podzielenia dwóch liczb całkowitych, otrzymasz wynik zmiennoprzecinkowy. Jest to ogromna zmiana w stosunku do Pythona 2. "//" jest teraz konieczne, aby uzyskać stare zachowanie. –

+0

Nadal nie rozumiem, dlaczego auto upcast na float .... wydaje mi się głupie ... Mam na myśli 'int/int = int' jest podstawową zasadą CS ... –

Odpowiedz

9

Nie jest prawdą w Pythonie 3, można przetestować go dla siebie:

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

Integer dzielenie i modulo z a i b podając q (iloraz) i r (reszta) odpowiednio zawsze zwraca numery które spełniają b*q + r == a i (a*b)>0 == q>0 (tj. a*b i q mają ten sam znak) i abs(r) < abs(q). Wyrażenie int(q) po prostu zawsze zaokrągla w kierunku 0, jeśli q jest liczbą zmiennoprzecinkową.

Zawsze będzie prawdziwe dla Pythona 2 chyba zrobić from __future__ import division, ale to dlatego, a/b == a//b jeśli a i b są liczbami całkowitymi w Pythonie 2.

+0

'>>> int (-1/3) == -1 // 3' ->' Prawda "Otrzymałem, że były prawdziwe, gdy próbowałem to w py26 ... –

+0

@JoranBeasley - To dlatego, że w Pythonie 2.6 'a/b == a // b' jeśli' a' i 'b' są liczbami całkowitymi. – Omnifarious

+0

@JoranBeasley Ponieważ w Pythonie 2, '/' z dwoma operandami całkowitymi robi dokładnie to, co robi '//'. Mówimy tutaj o Pythonie 3 (zgodność), a w Pythonie 3 różnią się one. – delnan

Powiązane problemy