为什么整数除法和转换为int之后的int的结果对于大数字是不同的?

时间:2014-11-04 17:06:38

标签: python floating-point division

print(10**40//2)
print(int(10**40/2))

代码输出:

5000000000000000000000000000000000000000
5000000000000000151893014213501833445376

为什么不同的价值观?为什么第二个print()的输出看起来如此?

1 个答案:

答案 0 :(得分:9)

10**40//2的浮点表示不准确:

>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'

这是因为浮点运算只是一种近似值,特别是当你超出CPU可以精确建模的范围时(因为浮点在硬件中处理)。

整数除法永远不必将10**40数字表示为浮点数,它只需要除以整数,在Python中可以任意大,而不会导致精度损失。

另见:

如果必须使用更高精度的浮点运算,请查看decimal module