これは浮動小数点値の等価性のテストのフォローアップです: 「精度」定数の標準名はありますか? . 等しい、より大きい、より小さい、より小さいか等しい、より大きいか等しい
という非常によく似た質問があります。Double.Epsilon
2 つの浮動小数点値xとyの等価性テストは、(単純な = ではなく) 次のように見える必要があることはよく知られています。
abs( x - y ) < epsilon 、ここでepsilonは非常に小さな値です。
epsilonの値を選択する方法は?
等値チェックで可能な限り最高の精度を得るために、イプシロンにできるだけ小さい値を選択することが明らかに望ましいでしょう。
例として、.NET フレームワークは定数System.Double.Epsilon
(= 4.94066 × 10 -324System.Double
) を提供します。これは、ゼロより大きい最小の正の値を表します。
ただし、次の理由から、この特定の値をepsilonとして確実に使用できないことが判明しました。
0 +
System.Double.Epsilon
≠ 01 +
System.Double.Epsilon
= 1 (!)
これは、私が正しく理解していれば、その定数はマシンの epsilonより小さいためです。
→これでいいの?
→ これは、イプシロン := マシン イプシロンを等価テストに
確実に使用できるという意味でもありますか?
これらの 2 つの質問は、上記のリンク先の 2 番目の SO 質問で既に適切に回答されているため、削除しました。
リンク先のウィキペディアの記事では、64 ビット浮動小数点数 (つまりdouble
、多くの言語の型) の場合、マシンのイプシロンは次のようになります。
2 -53、または約。0.000000000000000111 (小数点以下ゼロ15個の数値)
→ このことから、すべての 64 ビット浮動小数点値は (15 ではないにしても) 14 桁まで正確であることが保証されるということになりますか?