基本・応用情報処理試験

【原因を知り暗記をしない】コンピュータ計算で生じる誤差【5種類】

コンピュータでは、限られた桁数でデータを表したり、2進数でデータを扱うので、色々な誤差や、表現できないことが出てきます。

ほとんどないと思いますが、forループなどのイテレータに少数表現を用いると、誤差が原因で無限ループになることがあります。

なので、そもそもイテレータには、少数は使わないですが、、、、

桁落ち

絶対値がほぼ等しくて有効数字が落ちる。

例えば、、、

234.567(有効桁数6桁) – 234.566(有効桁数6桁)
= 0.001(有効桁数1桁)

このように、有効桁数が6桁から1桁に減っている。

情報落ち

絶対値の大きいものと小さいものの足し算や引き算を行ったとき、小さい数値が計算数値に反映されない。

例えば、、、

234.567 + 0.000011
= 234.567(有効数字の関係で無視される)

このように絶対値が小さいものの情報が反映されない。

丸め誤差

指定された有効桁数で演算結果を返すために、四捨五入、切り捨て、切り上げなどで下位の桁を削除される

例えば、、、

234.56788888888888
-> 234.568(有効桁数6桁)

このように丸める行為(四捨五入、切り捨て、切り上げ)などを行うことにより、下位の桁が削除される。

打ち切り誤差

無限回の計算で表される数値の計算結果を有限回数で打ち切る

例えば、、、

πや√2など計算を途中で打ち切る。
このように、計算を途中(有限回)で打ち切ることで生じる誤差

桁あふれ

オーバーフロー

演算結果が有限の桁内で表せる範囲を超えることによって、使用している記述方法では、値が表現しきれなくなる。

アンダーフロー

浮動少数点演算において、演算けかの指数部が小さくなりすぎ、使用している記述方法では、値が表現しきれなくこと。

例えば、、、

浮動小数点表記では、0や0に近い数値は表現することができない。

まとめ

①桁落ち:絶対値がほぼ同じで有効数字の桁数が落ちる
②情報落ち:絶対値の大小がでかい、有効数字は変わらないので小さい数字が落ちる
③丸め誤差:有効数字は変わらないので、切り捨て、切り上げ、四捨五入で丸めて情報が落ちる 
④打ち切り誤差:無限休数で表される数値の処理、πなど 
⑤桁あふれ:ビット数を超える(オーバーフロー、アンダーフロー)