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

为什么Number.MAX_SAFE_INTEGER加不同精度小数结果不一致?

结果差异的核心原因

这个现象完全是双精度浮点数的存储规则和默认舍入机制导致的,具体可以拆解为两点:

  • 双精度浮点数的精度是随数值量级动态变化的:它用1位符号、11位指数、52位尾数(隐含1位开头的1,总有效精度53位二进制)存储,数值越大,两个相邻可表示数的间隔(步长)越大:
    • 在数值为2的量级时,步长极小,仅能区分差值大于2^-51左右的两个数
    • 在数值为2^53的量级时,步长刚好为2,所以2^53 ~ 2^54区间内只能表示偶数,所有奇数都会被舍入到最近的偶数
  • 你写的两个小数字面量在解析阶段就已经被舍入为不同的值了,不是相加时才出现误差:
    • 2.0000000000000001和2的差值小于2量级下的最小步长,解析时会直接被舍入为精确的2,所以N + 2.0000000000000001本质和N+2完全等价,结果自然相同,相加后的和为2^53 +1,处于2^53量级,按默认舍入规则(就近取偶)会被舍入为9007199254740992
    • 2.000000000000001和2的差值已经超过了2量级下的最小步长,解析后会被舍入为一个大于2的可表示值,这个值加N后的总和,按舍入规则会被取到最近的偶数9007199254740994

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:57:01