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

为何1 + Number.MIN_VALUE等于1?相关数值精度问题问询

JavaScript浮点数精度问题解答

问题背景

你发现以下表达式结果均为true:

  • (1 + Number.MIN_VALUE) === 1
  • Object.is(1 + Number.MIN_VALUE, 1)

根据MDN定义:

Number.MIN_VALUE是JavaScript中可表示的最小正数值静态属性。

问题1:既然Number.MIN_VALUE非零,为何与1相加后结果未变化?

JavaScript里的数字采用IEEE 754双精度浮点数存储,这种格式的有效精度是53位(52位显式尾数 + 1位隐含的最高位1)。当数值是1时,它的二进制是精确的1.0,而Number.MIN_VALUE实际是2^-1074——这个数值太小了,连1的尾数部分最后一位都影响不了,所以相加时会被直接舍去,结果还是1。

说白了就是:1的精度范围覆盖不了这么小的增量,加了跟没加没区别。

问题2:能使1相加后产生变化的最小数值是多少?

这个数值是Number.EPSILON,它的实际值为2^-52。

双精度浮点数对1的精度极限就是2^-52:任何比它小的正数加1,都会因超出精度范围被舍去;只有等于或大于它的数加1,才能得到比1大的最小可表示浮点数。验证一下:
1 + Number.EPSILON !== 1 的结果为true,而且没有比Number.EPSILON更小的正数值能让这个等式成立。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:43:16