为什么大数的整数除法结果与转换为int后不同?

2 投票
1 回答
1220 浏览
提问于 2025-05-01 14:35
print(10**40//2)
print(int(10**40/2))

代码的输出结果:

5000000000000000000000000000000000000000
5000000000000000151893014213501833445376

为什么会有不同的值?为什么第二个 print() 的输出看起来是这样的?

暂无标签

1 个回答

11

计算 10**40//2 的浮点数表示并不准确:

>>> format(float(10**40//2), '.0f')
'5000000000000000151893014213501833445376'

这是因为浮点数运算总是近似值,特别是当你计算的数字超出了你的电脑处理器能准确表示的范围时(因为浮点数是在硬件中处理的)。

整数除法不需要把 10**40 表示成浮点数,它只需要对整数进行除法,而在 Python 中,整数可以非常大而不会失去精度。

你还可以查看:

如果你需要使用更高精度的浮点数运算,可以看看 decimal 模块

撰写回答