厳密な浮動小数点比較の回避

アプリケーションが厳密な浮動小数点比較に依存することは安全ではありません。丸めによるわずかな変分により、比較の結果が変わることがあり、非収束やその他の予期しない動作が発生します。

浮動小数点データが等しいかどうかのテストは、計算の予測精度に基づくある程度の許容誤差内で行う必要があります。例えば、Fortran 組み込み関数の EPSILON などを使用します。次の例で、この概念について説明します。

if (foo() == 2.0)

 

ここで、foo() は正確に 2.0 に一致することなく、2.0 に可能な限り近づきます。次に示すように、不正確な浮動小数点比較またはファジー比較を使用して、値が特定の許容誤差内にあることをテストすることで、コードの動作を向上できます。

epsilon = 1E-8;
if (abs(foo() - 2.0) <= epsilon)