小编典典

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

python

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

代码输出:

5000000000000000000000000000000000000000
5000000000000000151893014213501833445376

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


阅读 377

收藏
2021-01-20

共1个答案

小编典典

的浮点表示10**40//2形式不正确:

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

那是因为浮点算法只是一种近似,尤其是当您超出了CPU可以准确建模的范围时(因为浮点是在硬件中处理的)。

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

另请参阅:

如果必须使用更高精度的浮点算法,也请查看decimal模块

2021-01-20