計算において、丸め誤差[ 1 ]または丸め誤差[ 2 ]とは、正確な算術演算を使用した特定のアルゴリズムによって生成された結果と、有限精度の丸め演算を使用した同じアルゴリズムによって生成された結果との差です。[ 3 ]丸め誤差は、実数の表現とそれらで行われる算術演算の不正確さに起因します。これは量子化誤差の一種です。[ 4 ]近似方程式やアルゴリズムを使用する場合、特に実数 (理論上は無限の桁数を持つ) を表現するために有限桁数を使用する場合、数値解析の目的の 1 つは計算誤差を推定することです。[ 5 ]数値誤差とも呼ばれる計算誤差には、切り捨て誤差と丸め誤差の両方が含まれます。
丸め誤差を含む入力を用いた一連の計算を行うと、誤差が蓄積し、場合によっては計算結果を支配することがあります。条件の悪い問題では、大きな誤差が蓄積する可能性があります。[ 6 ]
要するに、数値計算には丸め誤差の2つの主要な側面が関係している。[ 7 ]
有限桁の数字列を用いて数値を表現しようとする際に生じる誤差は、表現誤差と呼ばれる丸め誤差の一種です。[ 8 ]以下に、十進数表現における表現誤差の例をいくつか示します。
表現に許容される桁数を増やすと、丸め誤差の大きさは小さくなりますが、有限桁に制限された表現では、依然として非可算個の実数に対してある程度の丸め誤差が発生します。計算の中間ステップで使用される追加の桁は、ガード桁として知られています。[ 9 ]
複数回丸めると、誤差が蓄積される可能性があります。[ 10 ]例えば、9.945309 を小数点以下 2 桁 (9.95) に丸め、さらに小数点以下 1 桁 (10.0) に丸めると、合計誤差は 0.054691 になります。9.945309 を 1 つのステップで小数点以下 1 桁 (9.9) に丸めると、誤差は少なくなります (0.045309)。これは、例えば、ソフトウェアがx86 80 ビット浮動小数点演算を実行し、その結果をIEEE 754 binary64 浮動小数点に丸める場合に発生する可能性があります。
固定小数点数システムと比較して、浮動小数点数システムは実数を表現するのに効率的であるため、現代のコンピュータで広く使用されています。実数は無限かつ連続であり、浮動小数点数システムであるは有限かつ離散的である。したがって、浮動小数点数システムでは、丸め誤差につながる表現誤差が発生する。
浮動小数点数システム特徴は整数:
どれでも以下の形式をとります。 どこは整数で、のために、 そしては整数で、。
IEEE規格では基数はバイナリです。正規化が使用されます。IEEE 規格では、符号、指数、仮数を浮動小数点ワードの別々のフィールドに格納し、それぞれのフィールドの幅 (ビット数) は固定されています。浮動小数点数で最も一般的に使用される精度レベルは、単精度と倍精度です。
マシンイプシロンは、浮動小数点数システムの丸め誤差のレベルを測定するために使用できます。以下に2つの異なる定義を示します。[ 3 ]
丸め処理には、切り捨てと最近傍丸めの2つの一般的なルールがあります。IEEE規格では最近傍丸めが採用されています。
次の例は、2 つの丸めルールにおける丸め誤差のレベルを示しています。[ 3 ]丸めルール、最も近い値への丸めは、一般的に丸め誤差が少なくなります。
最も近い値への丸めとIEEE倍精度演算の使用を想定します。
例:10進数並べ替えることができる バイナリポイントの右側の53ビット目は1であり、その後に他の非ゼロビットが続くため、最も近い値への丸め規則では切り上げ、つまり52ビット目に1ビットを加える必要があります。したがって、IEEE標準9.4の正規化された浮動小数点表現は次のようになります。
これで、丸め誤差は、とこの表現は無限尾部を破棄することによって得られる。 右尾から追加丸めステップで。したがって、丸め誤差は。
機械イプシロン上記の 2 つの丸めルールを使用した場合の丸め誤差のレベルを測定するために使用できます。以下に、式と対応する証明を示します。[ 3 ]ここでは、マシンイプシロンの最初の定義を使用します。
させてどこ、そして浮動小数点表現丸ごと刻む方式が採用されているため、 この量の最大値を決定するには、分子の最大値と分母の最小値を求める必要があります。(正規化システム)分母の最小値は分子は以下によって上から制限される。。 したがって、したがって、切り捨てによる丸めの場合。最も近い値への丸めの場合の証明も同様です。
浮動小数点数で正確に表現できる数値もあり、そのような数値は機械数と呼ばれますが、浮動小数点演算を実行すると、最終結果に丸め誤差が生じる可能性があります。
機械加算は、加算する2つの数値の小数点を揃え、それらを加算し、結果を浮動小数点数として再度格納することから成ります。加算自体はより高い精度で行うことができますが、結果は指定された精度に丸め直す必要があり、丸め誤差が発生する可能性があります。[ 3 ]
この例は、大きな数と小さな数を加算する際に丸め誤差が生じる可能性があることを示しています。指数を一致させるために仮数の小数点位置をずらすと、下位桁の一部が失われます。精度の低下は吸収として説明できます。[ 11 ]
2つの浮動小数点数を加算する場合、その合計が2つの数値のうち大きい方の値よりも桁違いに大きい場合は、丸め誤差が生じる可能性があることに注意してください。
この種のエラーは、単一の演算において吸収エラーと同時に発生する可能性がある。
一般に、2 つの p 桁の仮数の積は最大 2p 桁になるので、結果が仮数に収まらない可能性があります。[ 3 ]そのため、結果には丸め誤差が含まれます。
一般的に、2p桁の仮数部の商はp桁を超える場合がある。そのため、結果には丸め誤差が生じる。
吸収の法則は減算にも適用される。
ほぼ等しい2つの数の引き算は、減算による消去と呼ばれます。[ 3 ] 先頭の桁が消去されると、結果は小さすぎて正確に表現できない場合があり、単に次のように表現されます。。
多少大きい場合でもしかし、一般的なケースでは、結果は依然として著しく信頼性に欠ける。浮動小数点数において最も不確実性が高いのは右端の桁であるため、その値の正確性に対する信頼は低い。
これは、2つの数が近似値であることが知られている「壊滅的相殺」という現象と密接に関連している。
不正確な表現による丸め誤差のある初期入力に対して一連の計算を適用すると、誤差が拡大または蓄積される可能性がある。
アルゴリズムまたは数値処理は、入力の小さな変化が出力の小さな変化しか生み出さない場合、安定していると呼ばれ、出力の大きな変化を生み出す場合は不安定であると呼ばれます。 [ 12 ]例えば、「明白な」方法を使用すると、不安定になります。2 つの類似した量を減算する際に生じる大きな誤差のため、等価な式安定している。[ 12 ]
安定したアルゴリズムを使用した場合でも、問題自体が悪条件である場合、丸め誤差の蓄積により、問題の解が不正確になる可能性があります。
問題の条件数は、解の相対変化と入力の相対変化の比です。[ 3 ]入力の相対変化が小さい場合に解の相対変化も小さい場合、問題は条件が良いと言えます。そうでない場合、問題は条件が悪いと言えます。[ 3 ]言い換えれば、問題の条件数が 1 より「はるかに大きい」場合、問題は条件が悪いと言えます。
条件数は、条件の悪い問題を解く際に発生する丸め誤差の尺度として導入された。[ 7 ]