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