【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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。