为什么大数的整数除法结果与转换为int后不同?
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 中,整数可以非常大而不会失去精度。
你还可以查看:
- 浮点数运算:问题与限制 在 Python 教程中
- 每个程序员都应该知道的浮点数运算
- 每个计算机科学家都应该知道的浮点数运算
如果你需要使用更高精度的浮点数运算,可以看看 decimal
模块。