桁落ち誤差

桁落ち誤差とは『絶対値がほぼ等しい値の差を求めた時(減算)に有効桁数が大きく減ることで生じる誤差』のことです。

試験対策であれば上記を暗記するだけでも有効だと思います。が、暗記より理解したいという方は少し面倒ですが以下読み進めて理解すると忘れることがなくなると思います。

コンピュータで誤差が起きる理由

誤差の問題を考える際、最初になぜ誤差が起こるのかをイメージすると理解しやすい気がします。

コンピュータが扱える桁数は限界がある

無限GBのハードディスクが存在しないということは、コンピュータが扱える桁数にも限界があるということがわかります。

コンピュータは0と1=2進数しか扱えない

そしてデジタルデータというのはどこまで行っても0と1です。電気が流れているか、流れていないか。この2つの状態を利用して様々な文字や画像、音声などを表現します。つまり2進数に変換されるのが必須なんですね。

そしてこの2進数というものと10進数というものの間には正確に変換ができないものがあります。

こういった理由から様々な誤差が発生してくるんですね。

具体例

√121 – √120

こういった計算式があったとします。この式は以下のように変換できますね。

11 – 10.9544…

√120は無限小数になります。
また浮動小数点数に変換すると以下のようにも変換できます。

0.11 x 10^2 – 0.109544… x 10^2

これを有効桁数の範囲で計算すると以下のようになります。

0.000456 x 10^2

そしてこれを正規化してみます。正規化はコンピュータが計算を効率化するために行われる処理です。

0.456000 x 10^-1

ここで答えの最後の桁3つに0が追加されました。この0は正確な値でしょうか?

実は√120は10.9544の後5115・・・と続きます。すると0.456000の000は正確ではなさそうですよね?以下のように計算してみます。

11 – 10.95445115… = 0.0455488…

答えを正規化して比べてみます。
0.455488… x 10^-1
0.456000… x 10^-1

すでに誤差が生じていることがわかります。そして000というのは桁の表現ができておらず有効桁数が455488の6桁から456の3桁に減っていることがわかります。

コンピュータではこのような『絶対値がほぼ等しい値の計算をした時に有効桁数が減少する誤差』が生じます。そしてこの誤差を桁落ち誤差と呼びます。

対策

桁落ち誤差には計算方法で対策することも可能です。上記のような減算を加算に変換できる場合は加算にすることで誤差を小さくすることが可能になります。


投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)