print(10**40//2)
print(int(10**40/2))
代码输出:
5000000000000000000000000000000000000000
5000000000000000151893014213501833445376
为什么不同的价值观?为什么第二个print()
的输出看起来如此?
答案 0 :(得分:9)
10**40//2
的浮点表示不准确:
>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'
这是因为浮点运算只是一种近似值,特别是当你超出CPU可以精确建模的范围时(因为浮点在硬件中处理)。
整数除法永远不必将10**40
数字表示为浮点数,它只需要除以整数,在Python中可以任意大,而不会导致精度损失。
另见:
如果必须使用更高精度的浮点运算,请查看decimal
module。