5

JavaScript の数値はすべて 64 ビット (8 バイト) の浮動小数点数ですが、なぜ JavaScript の有効範囲は 5e-324 (負) から 1.7976931348623157e+308 (正) なのですか?

4

2 に答える 2

8

それがIEEE754仕様で定義されているものだからです。

0x 0000 0000 0000 0001 = 2⁻¹⁰²²⁻⁵² ≈ 4.9406564584124654 x 10⁻³²⁴ (Min subnormal positive double)
0x 000f ffff ffff ffff = 2⁻¹⁰²² - 2⁻¹⁰²²⁻⁵² ≈ 2.2250738585072009 x 10⁻³⁰⁸ (Max subnormal positive double)
0x 0010 0000 0000 0000 = 2⁻¹⁰²² ≈ 2.2250738585072014 x 10⁻³⁰⁸ (Min normal positive double)
0x 7fef ffff ffff ffff = (1 + (1 - 2⁻⁵²)) x 2¹⁰²³ ≈ 1.7976931348623157 x 10³⁰⁸ (Max Double)
于 2012-04-30T15:11:59.270 に答える
4

デノーマル値のため; たとえばhttp://en.wikipedia.org/wiki/Denormal_numberを参照してください。これらは、浮動小数点値の範囲を拡張して、他の方法よりもゼロに近い値を許可します。

これらを実装の詳細として扱うことをお勧めします。その目的は、非常に小さな中間結果で病理学的に振る舞いすぎないようにすることです。これらの非常に小さい値を使用すると、一部の精度が失われます。

于 2012-04-30T15:12:57.537 に答える