16

この質問に対する答えは非常に明白かもしれませんが、Mozilla のドキュメントや Google で簡単に検索しても見つかりません。

このようなコードがある場合

Number.MAX_VALUE + 1; // Infinity, right?
Number.MIN_VALUE - 1; // -Infinity, right?

次に、 Number.MAX_VALUE に何かInfinityを追加すると、それが にプッシュされると予想されます。結果はNumber.MAX_VALUE、私に吐き出されるだけです。

Infinityただし、Chrome JS コンソールで遊んでみると、実際には、十分に足し算/引き算をするまで、実際にはならないことに気付きました。

Number.MAX_VALUE + Math.pow(100,1000); // now we hit Infinity
Number.MIN_VALUE - Math.pow(100,1000); // -Infinity at last

Number.MAX_VALUEとの間のこの「バッファ」の説明は何Infinityですか?

4

2 に答える 2

19
于 2012-05-31T17:05:32.203 に答える
10

を見ると、 のバイナリ表現が 53 個の 1 の後に 971 個のゼロが続くNumber.MAX_VALUE.toString(2)ことがわかります。MAX_VALUEこれは、IEEE 754 浮動小数点が 2 のべき乗で乗算された仮数係数で構成されているためです (したがって、浮動小数点数の残りの半分は指数です)。ではMAX_VALUE、仮数部と指数部の両方が上限に達しているため、多くのビットがシフトされていることがわかります。

つまり、実際に仮数に影響を与えるのに十分な数を増やす必要がありMAX_VALUEます。そうしないと、追加の値が失われ、丸められます。

Math.pow(2, 969)MAX_VALUEはに傾かない最小の 2 の累乗ですInfinity

于 2012-05-31T16:52:17.797 に答える