コンピュータでは、限られた桁数でデータを表したり、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に近い数値は表現することができない。
まとめ
①桁落ち:絶対値がほぼ同じで有効数字の桁数が落ちる
②情報落ち:絶対値の大小がでかい、有効数字は変わらないので小さい数字が落ちる
③丸め誤差:有効数字は変わらないので、切り捨て、切り上げ、四捨五入で丸めて情報が落ちる
④打ち切り誤差:無限休数で表される数値の処理、πなど
⑤桁あふれ:ビット数を超える(オーバーフロー、アンダーフロー)