IEEE 754双精度的工作原理

JavaScript数字是64位IEEE 754「双精度」浮点数。64位分为三个字段:

  • 符号位(1位)——0为正,1为负
  • 指数(11位)——以1023为偏移量存储。原始值0表示非规格化数,2047表示无穷大或NaN。
  • 尾数(52位)——小数部分。规格化数有一个隐含的前导1,所以总共有53位精度。

数值为:±1.尾数 × 2(指数 - 1023)

这就是0.1 + 0.2 !== 0.3的原因——0.1和0.2无法用二进制精确表示,求和时会累积微小的舍入误差。可以点击「0.1 + 0.2」和「0.3」比较它们的位。