这个问题询问JavaScript中的最高数字,而不会降低精度。 在这里,我问有关JavaScript中可代表的最高数字。 另一个问题的一些答案引用了该问题的答案,但它们没有回答该问题,因此,我希望在这里安全地提问。

我试图找到答案,但中途迷路了。 JavaScript中可表示的最高数字似乎在2 ^ 1023和2 ^ 1024之间。 我走得更远(在iojs REPL中)

var highest = Math.pow(2, 1023);
for(let i = 1022; i > someNumber; i--) {
  highest += Math.pow(2, someNumber);
}

最高的数字似乎是someNumber在969和970之间。这意味着它在(2 ^ 1023 + 2 ^ 1022 + ... + 2 ^ 970)和(2 ^ 1023 + 2 ^ 1022 + ... + 2 ^ 969)。 我不确定如何在不耗尽内存和/或等待数年才能完成循环或函数的情况下走得更远。

JavaScript中可代表的最高数字是多少? JavaScript是否存储该数字的全部数字,还是仅存储一些数字,因为每当我看到10 ^ 21或更高的数字时,它们都以科学计数法表示? 为什么JavaScript可以代表这些极高的数字,特别是如果它可以“记住”所有数字的话? JavaScript不是64位基本语言吗?

最后,为什么这是最高的可代表数字? 我问是因为它不是2的整数指数,是因为它是浮点数吗? 如果我们采用最高的浮点数,那与2的指数有关吗?

===============>>#1 票数:3 已采纳

ECMAScript使用IEEE 754浮点表示内存中的所有数字(整数和浮点)。 它使用双精度 (64位),因此最大可能的数字如下(二进制):

(-1)^0 * (1.1111111111111111111111111111111111111111111111111111)_2 * 2^1023
     ^      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        ^^^^
 sign bit                     52 binary digits                         exponent

那就是1.9999999999999997779553950749686919152736663818359375 * 2^1023 ,它完全等于179769313486231570814527423734518473246981451219193357160576872808257310254570927992989173324623785766498017753719800531497718555288192667185248845624861831489179706103179456665410545164365169396987674822445002542175370097858557402467390846365155202987281348776667818932226328810501776426180817703854493120592.218308495538871112145305600 该数字在JavaScript中也可以作为Number.MAX_VALUE

===============>>#2 票数:2

JavaScript使用IEE 754双精度浮点数,也就是binary64 此格式具有1个符号位,11位指数和52位尾数。

可能的最高编号是使用最高的指数和尾数(带有0个符号位)进行编码的编号。 除了7ff (以16为底)的指数值用于编码InfinityNaN 因此,最大数被编码为7fef ffff ffff ffff ,其值是(1 +(1-2 ^(-52)))×2 ^ 1023。

有关该公式的更多详细信息,请参阅链接的文章。

  ask by trysis translate from so

未解决问题?本站智能推荐: