0

IEEE 浮動小数点演算の重要な特性の 1 つは、丸めによってビット数の制限と基数 2 形式が原因で計算に「エラー」が発生することです。

たとえば、C# の場合:

(Math.PI * 1e20 / 1e20) == Math.PI; // false

これらの操作のエラーの大きさを判断する方法はありますか? .NET は、Double.Epsilon0 より大きい最小の有効値を与えるフィールドを公開しますが、それは非ゼロの数値の比較には関係ありません。

編集:エラーを正確に計算する方法を求めているのではなく、その大きさを推定する方法を見つけようとしているだけです。

例 (これも C# の場合):

(1e20 + 1e3) == 1e20; // true
(1e20 + 1e4) == 1e20; // false

したがって、演算の誤差は1e20 + X約 1e3 のように見えます。これはdoubles、10 進数の精度が最大 17 桁であるため意味があります。

4

1 に答える 1

0

必要なのは、マシンのイプシロン (計算できる) であり、最小 (デノルム) の正の数ではありませ 。命名規則。

マシン イプシロンを取得すると、(IEEE 標準から) 基本的な代数演算 *、+、/、- の相対誤差が最大でイプシロンになることがわかります。つまり、x フロップ y = (x op y)(1+デルタ) ここで:

  • flop は浮動小数点演算です。たとえば、浮動小数点加算です。
  • op は、実数演算で対応する演算です
  • delta は相対丸め誤差であり、|delta| によって制限されます。<= イプシロン
于 2012-04-30T20:20:59.363 に答える