2012-10-11 70 views
6

我知道,如果數字都是正數,整數除法將總是返回與截斷浮點數結果相同的答案。如果他們中的一個或兩個都是負面的,這是真的嗎?整數除法:是一個// b ==整數(a/b)對於所有整數a,b是否爲真?

我只是很想知道是否有一個整數除法表達式會返回Python 2和Python 3中的相同結果(是的,我知道關於from __future__ import division)。

P.S.暫時忽略浮點溢出。

+1

*」的整數除法表達式將返回在Python 2和相同的結果Python 3「*再來一次? – NullUserException

+1

@NullUserException,在Python 3中,如果使用'/'分割兩個整數,您將得到浮點結果。這是來自Python 2的巨大變化。現在需要'// //'來獲得舊的行爲。 –

+0

我仍然不明白他們爲什麼自動向上浮動....對我來說似乎很愚蠢......我的意思是'int/int = int'是CS的核心原則...... –

回答

9

這不是在Python 3真實的,你可以測試它自己:

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

整數除法和a模和bq(商)和r(餘)分別將始終返回號碼滿足b*q + r == a(a*b)>0 == q>0(即a*bq具有相同的符號)和abs(r) < abs(q)。如果q是浮點數,則表達式int(q)總是向0進行舍入。

這將永遠是真正的Python 2除非你做from __future__ import division,但那是因爲a/b == a//b如果ab是整數,在Python 2

+0

'>>> int(-1/3)== -1 // 3' - >' True'我知道他們是真的,當我在py26中試用它時... –

+0

@JoranBeasley - 這是因爲在Python 2.6如果'a'和'b'是整數,'a/b == a // b'。 – Omnifarious

+0

@JoranBeasley因爲在Python 2中,具有兩個整數操作數的'/'正是「//」所做的。我們在這裏討論Python 3(兼容性),而在Python 3中它們有所不同。 – delnan

相關問題