2017-02-17 276 views
1

它们对于小数字似乎是相等的,但对于大数字则不同。a // b和int(a/b)之间有什么区别?

例如:

a = int(1267650600228229401496703205376/10) 
b = 1267650600228229401496703205376 // 10 
print(a - b) # prints 7036874417767 

a = int(1493845793475/10) 
b = 1493845793475 // 10 
print(a - b) # prints 0 

怎么来的?

+2

'INT(A/B)'被截断向零。 –

+2

在Python3中,'a/b'将执行浮点除法,这是不精确的。即使您将结果转换为int,您也已经引入了不精确性。 – khelwood

+1

这仅适用于Python 3.对于Python 2,它在两种情况下均为0。 –

回答

3

在Python 3 /执行浮点除法,它有53位的精度; //做底板划分,当两个操作数都是整数时(除了可用RAM的限制),它没有精度限制。

您可以通过使用true_division__future__进口获得在Python 2是Python 3的行为。

1

正如@khelwood解释的,在Python 3中,a/b执行浮点除法。尝试在解释器中输入1/2 - 您将获得0.5,而不是0

所以在你的榜样,1267650600228229401496703205376/10实际上等于126765060022822940149670320537.6 = 1.267650600228229401496703205376e+29(浮点除法),但由于浮动的不准确性,Python的评估它作为1.2676506002282295e+29,那么你已经失去精度,占的差异。

请参阅PEP 238

1

补充现有的答案似乎欢颜提的是,你不必去那么远了,观察的差异:

>>> -1//2 
-1 
>>> int(-1/2) 
0 
+0

是的,但这种差异是由于完全不同的因素 - //'使用地板分割。 OP询问的问题是由于浮动不准确。 –

+1

@ B.Eckles那么,我说'补充';它肯定应该是答案的一部分,因为标题问题是“// b和int(a/b)之间的区别是什么?” –

+0

真正的数据。采取的点。 :-) –

相关问题