对于大数,为什么整数除法和除法转换为int的结果不同?
发布于 2021-01-29 15:04:36
print(10**40//2)
print(int(10**40/2))
代码输出:
5000000000000000000000000000000000000000
5000000000000000151893014213501833445376
为什么值不同?为什么第二个输出print()
看起来如此?
关注者
0
被浏览
72
1 个回答
-
的浮点表示
10**40//2
形式不正确:>>> format(float(10**40//2), '.0f') '5000000000000000151893014213501833445376'
那是因为浮点算法只是一种近似,尤其是当您超出了CPU可以准确建模的范围时(因为浮点是在硬件中处理的)。
整数除法
10**40
不必将数字表示为浮点数,它只需要除以整数即可,在Python中整数可以任意增大而不会造成精度损失。另请参阅:
- 浮点算法: Python教程中的 问题和局限性
- 每个程序员应了解的浮点运算法则
- 每个计算机科学家都应了解的浮点运算法则
如果必须使用更高精度的浮点算法,也请查看
decimal
模块。