Muk*_*man 2 python floating-point division
print(10**40//2)
print(int(10**40/2))
Run Code Online (Sandbox Code Playgroud)
输出代码:
5000000000000000000000000000000000000000
5000000000000000151893014213501833445376
Run Code Online (Sandbox Code Playgroud)
为何不同的价值?为什么第二个的输出print()看起来如此?
浮点表示10**40//2不准确:
>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'
Run Code Online (Sandbox Code Playgroud)
这是因为浮点运算只是一种近似值,特别是当你超出你的CPU可以精确建模的时候(因为浮点在硬件中处理).
整数除法永远10**40不必将数字表示为浮点数,它只需要除以整数,这在Python中可以任意大,而不会出现精度损失.
另见:
如果必须使用更高精度的浮点运算,还要查看decimal模块.