【JSリファレンス】Number.EPSILON
更新日:2024/06/14
Number.EPSILONは、Numberコンストラクターのプロパティです。
数値として表せる最小の数値で、具体的には1と1の次の値の差の最小値を表します。
これは倍精度浮動小数点数での制限によるもので、2の-52乗です。
ECMAScript仕様では、約2.2204460492503130808472633361816 × 10**-16と記述されています。
浮動小数点数は計算誤差が多いため、等値比較が上手くいかないことがあります。
console.log( 0.1 + 0.7 === 0.8 ); // false
このようなケースでは、数値の差の絶対値がNumber.EPSILONより小さいかどうかを許容範囲として判定します。
console.log(
Math.abs((0.1 + 0.7) - 0.8) < Number.EPSILON
); // true
しかし、これでも上手くいかないことが多いです。
次の比較は、上手くいきません。
console.log(
Math.abs((30000.1 + 40000.7) - 70000.8) < Number.EPSILON
); // false
整数部が大きいと、誤差が大きくなるためです。
console.log(
Math.abs((30000.1 + 40000.7) - 70000.8 )
); // 1.4551915228366852e-11
このようなケースでは、小数部の有効桁数を考慮して許容範囲を設定します。
console.log(
Math.abs((30000.1 + 40000.7) - 70000.8) < 0.01
); // false
更新日:2024/06/14
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。