丸め誤差

コンピューティングにおいて丸め誤差[1]丸め誤差[2]とも呼ばれ正確な演算を使用する特定のアルゴリズムによって生成された結果と、有限精度の丸め演算を使用する同じアルゴリズムによって生成された結果との間の差です[3]丸め誤差は、実数の表現とそれを使用した算術演算の不正確さによって発生します。これは量子化誤差の一種です[4]近似方程式またはアルゴリズムを使用する場合、特に有限の桁を使用して実数 (理論上は無限の桁数を持つ) を表現する場合、数値解析の目標の 1 つは計算誤差を推定することです[5]計算誤差は数値誤差とも呼ばれ、切り捨て誤差と丸め誤差の両方が含まれます。

丸め誤差を含む入力を含む一連の計算を実行すると、誤差が蓄積され、場合によっては計算を支配することがあります。条件が悪ければ、大きな誤差が蓄積される可能性があります。[6]

簡単に言うと、数値計算における丸め誤差には2つの主要な側面がある:[7]

  1. コンピュータが数値の大きさと精度の両方を表現する能力は、本質的に限られています。
  2. 特定の数値操作は、丸め誤差の影響を非常に受けやすい傾向があります。これは、数学的な考慮と、コンピュータが算術演算を実行する方法の両方に起因する可能性があります。

表現エラー

有限の数字列を使用して数値を表現しようとすることで生じる誤差は、表現誤差と呼ばれる丸め誤差の一種です[8]以下に、10進表現における表現誤差の例をいくつか示します。

表記表現近似エラー
170. 142 8570.142 8570.000 000 142 857
2行目0.693 147 180 559 945 309 41...0.693 1470.000 000 180 559 945 309 41...
ログ10 20.301 029 995 663 981 195 21...0.30100.000 029 995 663 981 195 21...
3√21.259 921 049 894 873 164 76...1.259920.000 001 049 894 873 164 76...
√21.414 213 562 373 095 048 80...1.414210.000 003 562 373 095 048 80...
e2.718 281 828 459 045 235 36...2.718 281 828 459 0450.000 000 000 000 000 235 36...
π3.141 592 653 589 793 238 46...3.141 592 653 589 7930.000 000 000 000 000 238 46...

表現に許容される桁数を増やすと、起こり得る丸め誤差の大きさは減少しますが、有限桁に制限された表現では、無数個の実数に対しては依然としてある程度の丸め誤差が発生します。計算の中間ステップで使用される追加の桁は、ガード桁と呼ばれます[9]

複数回の丸めは誤差を蓄積させる可能性があります。[10]例えば、9.945309を小数点以下2桁(9.95)に丸め、さらに小数点以下1桁(10.0)に丸めた場合、合計誤差は0.054691になります。9.945309を1回の丸めで小数点以下1桁(9.9)に丸めると、誤差は小さくなります(0.045309)。これは、例えばソフトウェアがx86 80ビット浮動小数点で演算を実行し、その結果をIEEE 754 64進浮動小数点数に丸める場合に発生する可能性があります。

浮動小数点数システム

固定小数点数システムと比較して浮動小数点数システムは実数の表現に優れているため、現代のコンピュータで広く使用されています。実数は無限かつ連続ですが、浮動小数点数システムは有限かつ離散的です。そのため、浮動小数点数システムでは表現誤差が発生し、それが丸め誤差につながります。

浮動小数点数の表記

浮動小数点数システムは整数によって特徴付けられます。

  • : 基数または基数
  • : 精度
  • : 指数範囲、下限は上限は

は、次の形式を持ちます。 は、に対してとなる整数であり、は、となる整数です

正規化された浮動小数点数システム

  • 浮動小数点数システムは、数値がゼロでない限り、先頭の桁が常に非ゼロである場合に正規化されている。[3]仮数はであるため、正規化されたシステムにおける非ゼロ数の仮数は を満たす。したがって、非ゼロのIEEE浮動小数点数の正規化形式はであり、ここでとなる。2進法では、先頭の桁は常に であるため、書き出されず、暗黙のビットと呼ばれる。これにより、精度が1ビット向上し、表現誤差による丸め誤差が低減される。
  • 浮動小数点数システムは有限かつ離散的であるため、すべての実数を表すことはできません。つまり、無限の実数は、丸め規則によって有限の数で近似することしかできません。与えられた実数の浮動小数点近似は、 によって表されます。
    • 正規化された浮動小数点数の総数は
      • 正または負の符号の選択を数える
      • 先頭の数字の選択を数える
      • 残りの有効数字を数える
      • 指数の選択を数える
      • 数が の場合をカウントします

IEEE標準

IEEE規格では、基数は2進数、つまり であり、正規化が用いられます。IEEE規格では、符号、指数、仮数をそれぞれ固定幅(ビット数)の浮動小数点ワードの別々のフィールドに格納します。浮動小数点数で最も一般的に使用される精度レベルは、単精度と倍精度です。

精度符号(ビット)指数(ビット)末尾の仮数フィールド(ビット)
シングル1823
ダブル11152

マシンイプシロン

マシンイプシロンは、浮動小数点数における丸め誤差のレベルを測定するために使用できます。ここでは2つの異なる定義を示します。[3]

  • マシンイプシロンは、浮動小数点数システムで非ゼロの実数を表現する際に可能な最大絶対相対誤差です。
  • マシンイプシロンは と表記され、となる最小の数です。したがって、の場合は常に となります

異なる丸めルールによる丸め誤差

一般的な丸め規則には、切り捨てによる丸めと、最も近い値への丸めの2つがあります。IEEE標準では、最も近い値への丸めが採用されています。

  • 切り捨てによる丸め:の基数展開は、 - 番目の桁の後で切り捨てられます
    • この丸めルールは、結果を常にゼロに近づけるため、偏りがあります。
  • 最も近い値に丸めるは に最も近い浮動小数点数に設定されます。同点の場合は、格納されている最後の桁が偶数である(また、2進数形式では最後の桁が0である)浮動小数点数が使用されます。
    • IEEE 標準では基数がであるため、同点の場合は最後の桁が になるように丸められます
    • この丸めルールはより正確ですが、計算コストは​​高くなります。
    • 同点の場合、最後に格納された桁が偶数になるように丸めることで、体系的に切り上げられたり切り下げられたりすることがなくなります。これは、長い計算において、単に偏った丸めによって望ましくない緩やかなずれが生じる可能性を回避するためです。
  • 次の例は、2つの丸め規則における丸め誤差のレベルを示しています。[3]丸め規則(最も近い値に丸める)では、一般に丸め誤差が少なくなります。
×切り刻み丸め誤差最も近い値に丸める丸め誤差
1.6491.60.0491.60.049
1.6501.60.0501.60.050
1.6511.60.0511.7−0.049
1.6991.60.0991.7−0.001
1.7491.70.0491.70.049
1.7501.70.0501.8−0.050

IEEE標準における丸め誤差の計算

最近似値への丸めと IEEE 倍精度の使用を想定します。

  • 例: 小数は次のように並べ替えられます

2進小数点の右側53番目のビットは1で、その後に非ゼロビットが続くため、最も近い値に丸める規則では切り上げ、つまり52番目のビットに1ビットを加算する必要があります。したがって、IEEE規格9.4における正規化された浮動小数点表現は次のようになります。

  • これで、で表すときに丸め誤差を計算できるようになりました

この表現は、右端から無限末尾を破棄し、丸めステップで追加することによって導出されます。

それから
したがって、丸め誤差は です


マシンイプシロンを用いた丸め誤差の測定

マシンイプシロンは、上記の2つの丸め規則を用いた場合の丸め誤差のレベルを測定するために使用できます。以下に式と証明を示します。[3]ここではマシンイプシロンの最初の定義を使用します。

定理

  1. 切り刻み:
  2. 最も近い値に丸める:

証拠

とします。ここで、 はの浮動小数点表現です。丸めによる切り捨てが使用されているため、 となります。この量の最大値を決定するには、分子の最大値と分母の最小値を見つける必要があります。(正規化されたシステム)であるため、分母の最小値は です。分子は によって上方に制限されます。したがって、 となります。したがって、丸めによる切り捨ての場合 となります。最近接丸めの証明も同様です。

  • マシンイプシロンの最初の定義は、最も近い値に丸めるルールを使用する場合の 2 番目の定義と完全には等しくありませんが、チョップによる丸めの場合は等価であることに注意してください。

浮動小数点演算による丸め誤差

一部の数値は浮動小数点数で正確に表現でき、そのような数値はマシン数と呼ばれますが、浮動小数点演算を実行すると最終結果に丸め誤差が生じる可能性があります。

追加

機械による加算は、加算する2つの数値の小数点を揃え、加算し、その結果を再び浮動小数点数として保存する処理から成ります。加算自体はより高い精度で実行できますが、結果は指定された精度に丸められる必要があり、丸め誤差が生じる可能性があります。[3]

  • 例えば、IEEE倍精度でを に加算すると、 IEEE標準では最も近い値への丸めが使用されるため、 と保存されます。したがって、 はIEEE倍精度では と等しく、丸め誤差は となります

この例は、大きな数と小さな数を加算する際に丸め誤差が生じる可能性があることを示しています。指数を一致させるために仮数の小数点をシフトすると、下位の桁の一部が失われます。この精度の低下は吸収と表現できます。[11]

2 つの浮動小数点数を加算すると、その合計が2 つのうち大きい方の合計より 1 桁大きい場合に丸め誤差が生じる可能性があることに注意してください。

  • 例えば、基数、精度の正規化浮動小数点数システムを考えてみましょう。このとき、 および となりますただし、であることに注意してください。丸め誤差 があります

この種のエラーは、単一の操作で吸収エラーと同時に発生する可能性があります。

乗算

一般に、2つのp桁の仮数の積は最大2p桁となるため、結果が仮数部に収まらない可能性があります。[3]そのため、結果には丸め誤差が含まれます。

  • 例えば、基数が で、仮数部が最大 桁である正規化浮動小数点数システムを考えてみましょう。このとき、および となります。ただし、仮数部が最大 桁であるため、となることに注意してください。丸め誤差は となります

分割

一般に、2p 桁の仮数の商には p 桁を超える桁が含まれる場合があります。そのため、結果には丸め誤差が含まれます。

  • たとえば、上記の正規化された浮動小数点数システムがまだ使用されている場合、しかし、。つまり、末尾が切り取られます。

減算

吸収は減算にも適用されます。

  • 例えば、IEEE倍精度でから を減算すると、 IEEE標準では最も近い値への丸めが使用されるため、 として保存されます。したがって、 はIEEE倍精度では と等しく、丸め誤差は となります

ほぼ等しい2つの数を減算することを減算消去といいます。[3] 先頭の数字を消去すると、結果が小さすぎて正確に表せない場合があり、単に と表されます

  • 例えば、ここでは機械イプシロンの2番目の定義が使用されています。 の解は何でしょうかと はほぼ等しい数であり、 は であることが知られています。しかし、浮動小数点数システムでは、は十分に表現できる大きさですが、 の両方のインスタンスは切り捨てられ、 になります

をいくらか大きくしたとしても、典型的なケースでは結果の信頼性は依然として著しく低くなります。浮動小数点数において最も不確実性が高いのは右端の桁であるため、値の精度にはあまり信頼がおけません。

  • たとえば、。結果は明確に表現できるが、それにはあまり信頼性がない。

これは、2 つの数値が近似値であることが知られている壊滅的なキャンセルの現象と密接に関連しています

丸め誤差の蓄積

不正確な表現による丸め誤差のある初期入力に一連の計算を適用すると、誤差が拡大または累積される可能性があります。

不安定なアルゴリズム

アルゴリズムまたは数値処理は、入力の小さな変化が出力に小さな変化しか生じない場合には安定していると呼ばれ、出力に大きな変化が生じる場合は不安定であると呼ばれます。 [12]例えば、 「明白な」方法を用いた計算は、2つの類似した量を減算する際に大きな誤差が生じるため、ほぼ不安定ですが、同等の式は安定しています。[12]

不完全な問題

安定したアルゴリズムを使用した場合でも、問題自体が悪条件である場合は、丸め誤差の蓄積により、問題の解決が不正確になる可能性があります。

問題の条件数とは、解の相対的な変化と入力の相対的な変化の比です。[ 3 ]入力の相対的な変化が小さくても解の相対的な変化が小さい場合、問題は条件付き問題です。そうでない場合、問題は条件付き問題です。[3]言い換えれば、条件数が1より「はるかに大きい」場合 、問題は条件付き問題です。

条件数は、条件の悪い問題を解くときに生じる可能性のある丸め誤差の尺度として導入されます。[7]

参照

参考文献

  1. ^ Butt, Rizwan (2009)「MATLABを用いた数値解析入門」Jones & Bartlett Learning、pp.  11– 18、ISBN 978-0-76377376-2
  2. ^ Ueberhuber、Christoph W. (1997)、Numerical Computation 1: Methods、Software、および Analysis、Springer、pp.  139–146ISBN 978-3-54062058-7
  3. ^ abcdefghij Forrester, Dick (2018). Math/Comp241 数値解析法(講義ノート) .ディキンソン大学.
  4. ^ Aksoy, Pelin; DeNardis, Laura (2007)、Information Technology in Theory、Cengage Learning、p. 134、ISBN 978-1-42390140-2
  5. ^ ラルストン、アンソニー、ラビノウィッツ、フィリップ(2012年)、数値解析入門、ドーバー数学書籍(第2版)、クーリエ・ドーバー出版、pp.  2-4ISBN 978-0-48614029-2
  6. ^ チャップマン、スティーブン(2012)、MATLABプログラミングとエンジニアのためのアプリケーション、Cengage Learning、p.454、ISBN 978-1-28540279-6
  7. ^ ab Chapra, Steven (2012). 『MATLABによる応用数値解析:エンジニアと科学者のための第3版』McGraw-Hill . ISBN 9780073401102
  8. ^ ラプランテ、フィリップ A. (2000). 『コンピュータサイエンス、エンジニアリング、テクノロジー辞典』CRC Press . p. 420. ISBN 978-0-84932691-2
  9. ^ ハイアム、ニコラス・ジョン(2002). 数値アルゴリズムの精度と安定性(第2版).応用数学協会(SIAM). pp.  43– 44. ISBN 978-0-89871521-7
  10. ^ Volkov, EA (1990). 数値解析法. Taylor & Francis . p. 24. ISBN 978-1-56032011-1
  11. ^ Biran, Adrian B.; Breiner, Moshe (2010). "5".すべてのエンジニアMATLABとSimulinkについて知っておくべきこと.フロリダ州ボカラトン: CRC Press . pp.  193– 194. ISBN 978-1-4398-1023-1
  12. ^ ab Collins, Charles (2005). 「条件と安定性」(PDF) .テネシー大学数学部. 2018年10月28日閲覧

さらに読む

  • マット・パーカー(2021年)『Humble Pi:現実世界で数学がうまくいかないとき』リバーヘッドブックス、ISBN 978-0593084694
  • MathWorld での丸め誤差。
  • ゴールドバーグ、デイヴィッド (1991年3月). 「すべてのコンピュータ科学者が浮動小数点演算について知っておくべきこと」(PDF) . ACMコンピューティングサーベイ. 23 (1): 5– 48. doi :10.1145/103162.103163. S2CID  222008826. 2016年1月20日閲覧.([1]、[2])
  • 20の有名なソフトウェア災害
  • 四捨五入計算機
Retrieved from "https://en.wikipedia.org/w/index.php?title=Round-off_error&oldid=1319573605"