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

为何Number.MAX_VALUE加2**969仍等于自身?2**969是临界值吗?

问题解析

JavaScript里的Number是遵循IEEE 754标准的双精度浮点数,它的数值范围和精度由固定的二进制结构决定:1位符号位、11位指数位、52位尾数位。

1. Number.MAX_VALUE到底是什么?

Number.MAX_VALUE是双精度浮点数能表示的最大有限数,具体数值可以写成:

Number.MAX_VALUE = (2 - 2^-52) * 2^1023 = 2^1024 - 2^971

简单说,它的指数位已经用到了最大的合法值(比无穷大的指数少1),尾数位则是全1,已经没有多余的精度来表示更大的有限数了。

2. 浮点数的舍入规则

双精度浮点数计算时,如果结果没法精确表示,会按**“向最近的偶数舍入”**规则处理:要么舍入到最近的可表示值,要是刚好卡在两个值中间,就选尾数最后一位是偶数的那个。

对于Number.MAX_VALUE来说,它的下一个可表示的“值”就是Infinity(指数位再进位就会触发无穷大),两者之间的数值差是2^971。

3. 为什么两个表达式结果不同?

  • 当给Number.MAX_VALUE加2**969时:
    这个增量比2^971的一半(也就是2^970)还小,按照舍入规则,结果会被“拉回”Number.MAX_VALUE,所以等式成立,输出true。

  • 当加2**970时:
    这个增量刚好是2^971的一半,触发舍入规则后,结果会被舍入到Infinity。而Infinity和Number.MAX_VALUE不相等,所以输出false。

4. 2**969是临界值吗?

不是。真正的临界值是2^970:

  • 只要增量小于2^970,结果都会被舍入成Number.MAX_VALUE;
  • 增量大于等于2^970时,结果就会变成Infinity,不再等于原数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:55:14