print(10**40//2)
print(int(10**40/2))
代码输出:
5000000000000000000000000000000000000000
5000000000000000151893014213501833445376
为什么值不同?为什么第二个print()的输出看起来如此?
解决方法:
10 ** 40 // 2的浮点表示形式不正确:
>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'
这是因为浮点算术只是一种近似,尤其是当您超出了CPU可以准确建模的范围时(因为浮点是在硬件中处理的).
整数除法不必将10 ** 40数字表示为浮点数,它只需要除以整数即可.在Python中,整数可以任意增大而不会造成精度损失.
另请参阅:
Python教程中的> Floating Point Arithmetic: Issues and Limitations
> What Every Programmer Should Know About Floating-Point Arithmetic
> What Every Computer Scientist Should Know About Floating-Point Arithmetic
如果必须使用更高精度的浮点算法,也请查看decimal
module.