You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中1023456789876543201除以9两种运算结果不一致疑问

问题原因解析

这个现象本质还是双精度浮点数的精度限制,你认为不属于典型浮点数问题属于认知误区,只是这次精度丢失发生在大整数区间,而非大家熟悉的小数区间。

核心原理

Python 中使用/做除法默认返回 IEEE 754 标准的64位双精度浮点数,这种浮点数的存储结构决定了它只有53个二进制位用来存储有效数字,换算成十进制大概是15~17位有效数字,所有超过这个长度的整数都无法被精确存储,会自动取最近的可表示的浮点数近似值。

  • 双精度浮点数可精确存储的最大整数为2^53 = 9007199254740992,共16位十进制长度
  • 你计算得到的正确商113717421097393689是18位十进制数,已经远远超出了精确表示的上限

误差产生过程

  1. 首先被除数1023456789876543201本身就是19位十进制数,转成浮点数时已经丢失了低位精度
  2. 除法计算得到的商同样超过双精度精确存储上限,系统会自动匹配最接近的可表示双精度值:113717421097393696,就是你代码一输出的结果
  3. 而//是整数除法,全程用Python支持任意精度的整数类型计算,不会有精度丢失,所以输出的是正确结果

你可以用以下代码验证这个逻辑:

print(int(float(113717421097393689)))
# 输出结果为 113717421097393696,和你代码一的结果完全一致

内容的提问来源于stack exchange,提问作者Natalia S. Efimtseva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:48:04