3

知りたい人がいたら...

私は Javavscript が表すことができる最大の整数を把握しようとしていました。最初は、Number.MAX_VALUE を使用するだけでうまくいくと思っていましたが、それはばかげた仮定でした。

Javascript は、IEEE 754 標準に従って、すべての数値を倍精度浮動小数点数として格納します。

Number.MAX_VALUE が等しい

7fef ffff ffff ffff, approximately 1.7976931348623157e+308. 

この形式で格納できる次に小さい数値は次のようになります。

7fef ffff ffff fffe, approximately 1.7976931348623155e+308.

これら 2 つの数値の間には明らかにかなりのギャップがあり、次のような動作が発生します。

Number.MAX_VALUE == (Number.MAX_VALUE-1) //true

さて、それは私を怖がらせるものではありません。それはただの事実です。私が探しているのは、この次の条件がJSで最初に真になるときです

x == (x+1) //true
4

1 に答える 1

4

上記の条件が満たされるまで単純に 1 ずつ追加するスクリプトを作成するのではなく、Wikipedia の IEEE 倍精度浮動小数点のページに次のテキストがあることに気付きました。

「2^52=4,503,599,627,370,496 と 2^53=9,007,199,254,740,992 の間では、表現可能な数値は正確に整数です。次の範囲である 2^53 から 2^54 では、すべてが 2 倍されるため、表現可能な数値は偶数です。等。"

したがって、2^53 が連続する整数の範囲の上限になるようで、次のように検証されました。

Math.pow(2,53) == Math.pow(2,53)+1 //true
Math.pow(2,53) == Math.pow(2,53)-1 //false

実際にはその範囲のローエンドは必要ありませんが、誰かがそれが何であるかを知っていれば興味深いかもしれません.

于 2013-10-02T21:58:43.050 に答える