IEEE浮動小数点演算の1つの重要な特性の1つは、制限されたビット数とベース2形式による計算で「エラー」が発生することです。浮動小数点計算における誤差の推定
など。 C#で:
(Math.PI * 1e20/1e20) == Math.PI; // false
これらの操作のエラーの大きさを判断する方法はありますか? .NETはDouble.Epsilon
フィールドに0より大きい最小有意値を与えますが、非ゼロ数値の比較には関係ありません。
編集:正確にに誤差を計算する方法を求めていないので、私はその大きさを推定する方法を見つけようとしています。例えば
(再度、C#で):
(1e20 + 1e3) == 1e20; // true
(1e20 + 1e4) == 1e20; // false
だから操作1e20 + X
の誤差がdoubles
が小数精度の最大17桁の数字を持っているので、意味が約1E3、であるように見えます。
私はあなたの計算に基づいて誤差の見積もりを計算する必要があると思います。ここで役立つ情報があります:http://stackoverflow.com/questions/3166851/estimating-error-on-calculations-using-decimals –
エラーは離散的で累積的で、計算ごとに発生する場合と発生しない場合があります。すべての計算で正確な誤差を予測または計算するには非常に時間がかかります(これを行うには、ソフトウェア計算を別の任意の精度で行う必要があります)。また、80ビットの拡張精度浮動小数点をサポートするdelphiのようなものでこれを行うこともできます。 –
@ルーカス:「あなたの計算に基づいてエラー推定を計算する」とはどういう意味ですか? –