JavaScript如何在内部表示大于Number.MAX_SAFE_INTEGER的整数?

时间:2019-02-15 15:50:54

标签: javascript

在javascript中,数字在内部表示为双精度浮点数,表示有53位可用于表示整数值。有一个Number.MAX_SAFE_INTEGER常量说明了这一点,它等于Math.pow(2, 53) - 1。但是,在JavaScript控制台中,我可以输入Number.MAX_SAFE_INTEGER + 20,它将吐出正确的整数值。

javascript如何在内部表示大于Number.MAX_SAFE_INTEGER的数字?

1 个答案:

答案 0 :(得分:1)

基本浮点数表示为:

 digits * 2 ** movement

digits具有52位,movement具有11位,并且两者共同构成一个64位数字(带有1个符号位)。现在,仅用movement0来表示整数,然后digits包含52位数字,并且最多可以容纳2 ** 53 - 1个数字。现在,对于更大的数字,您必须使用movement,这基本上意味着您向左或向右移动digits,因此会失去准确性。

想象数字只需要8位

  number     >     digits | movement > result
   // savely represented
  11111111   >  111111111 | 0        > 11111111
  // lost the last 1
  111111111  >  111111111 | 1        > 111111110
   // lost the two last 1s
  1111111111 >  11111111  | 10       > 1111111100