对于小数字它们似乎相等但对于较大数字则不同。
例如:
a = int(1267650600228229401496703205376/10)
b = 1267650600228229401496703205376 // 10
print(a - b) # prints 7036874417767
a = int(1493845793475/10)
b = 1493845793475 // 10
print(a - b) # prints 0
怎么回事?
答案 0 :(得分:3)
在Python 3中/
执行浮点除法,它具有53位精度; //
进行分层划分,当两个操作数都是整数时,它没有精度限制(除了可用RAM强加的限制)。
您可以使用true_division
__future__
导入在Python 2中获取Python 3行为。
答案 1 :(得分:1)
正如@khelwood解释的那样,在Python 3中,a/b
执行浮点除法。尝试在解释器中输入1/2
- 您将获得0.5
,而不是0
。
所以在你的例子中,1267650600228229401496703205376 / 10
实际上等于126765060022822940149670320537.6 = 1.267650600228229401496703205376e+29
(浮点除法),但是由于浮点数的不准确性,Python将其评估为1.2676506002282295e+29
,所以你'失去了精确度,这导致了差异。
请参阅PEP 238。
答案 2 :(得分:1)
补充现有的答案似乎值得一提,你不需要那么远就能看出差异:
>>> -1//2
-1
>>> int(-1/2)
0