为何整数除法和除法后转换为int的结果对于大数而言不同?

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.

上一篇:[团队项目]Scrum 项目1.0 (演说视频)NABCD


下一篇:c-如何让GCC编译器将变量除法转换为mul(如果更快)