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

Python3中1.0+1e-16返回1.0的IEEE754双精度运算精度问题咨询

你忽略了三个关键细节,具体解释如下:

精度规则限制

IEEE754 64位双精度浮点数的有效位共53位:包含1位隐含的整数位1,以及52位显式存储的小数位。对于数值1.0(指数为1023,属于1~2的数值区间),最小的可表示增量(ULP,最后一位单位)是 2^-52 ≈ 2.2204e-16。也就是说1.0和下一个能被双精度精确表示的浮点数之间,差了约2.22e-16,小于这个差值的增量无法直接体现在尾数中,需要经过舍入处理。

舍入规则的影响

IEEE754默认采用就近舍入,中间值取偶数的规则:

  • 计算结果落在两个可表示数值之间时,舍入到距离更近的可表示值
  • 如果刚好在两个值中间,选择尾数最后一位为偶数的数值
    1e-16≈1.0×10^-16,小于0.5倍ULP(≈1.1102e-16),因此1.0 + 1e-16的结果距离1.0更近,直接舍入为1.0。

推导过程的误差

你给出的1e-16的指数值有误:你标注的指数01111001101对应实际指数为973-1023=-50,对应的数值是2^-50≈8.88e-16,远大于真实的1e-16。如果运行1.0 + 9e-16,输出结果为1.000000000000001,符合你的推导逻辑,但这和1e-16的实际存储情况不符。
真实的1e-16对齐到1.0的指数后,所有有效位都落在低于0.5ULP的位置,舍入后直接被丢弃,最终结果就是1.0。
你可以通过Python代码验证阈值:1.0 + 2.3e-16的输出就不再是1.0。

内容的提问来源于stack exchange,提问作者jSh4rk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:02