IEEE 浮動小数点演算の重要な特性の 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
約 1e3 のように見えます。これはdoubles
、10 進数の精度が最大 17 桁であるため意味があります。