丸め誤差
コンピュータで発生する「誤差」とは?
コンピュータは8ビットや32ビットなどのようにあらかじめ決められたビット数の範囲で数をあらわします。
そうすると「表現できる数の範囲」は決まります。表現できる数の最小値を超えることを「アンダーフロー」、最大値の数を超えることを「オーバーフロー」といいます。
例えば、2÷3 = 0.6666666...のように割り切れなくて無限に続く小数のことを「無限小数」といい、このような無限小数は2進数でも存在します。
10進数の0.1を2進数に変換すると 0.0001100110011... のように無限に続きます。
コンピュータはあらかじめ決められた範囲で数をあらわします。そのため無限小数のような数は決められた範囲に収まりません。
これらの数をコンピュータであらわす時は「なるべく近い値」を使います。その結果、実際の値と誤差が生じてしまうわけです。
誤差は様々なケースで発生します。本記事では「丸め誤差」について紹介しています。
丸め誤差とは?
丸め誤差とは、コンピュータが表現できる数の範囲(有効桁)を超えた場合に「四捨五入」や「切り上げ」「切り捨て」などを行い有効桁以降の値を捨てることにより生じる誤差のことです。
上記は「丸め誤差」のイメージ例です。
「1.100110011001100110011001100110011...」と繰り返されて終わらない無限小数を「1.10011001100110011001100」のように有効桁以降を「切り捨て」しています。
表現可能な桁数より後ろの値を「四捨五入」「切り上げ」「切り捨て」などで削る処理を「丸める」と呼び、このとき捨てた値によって本来の値との間に生じる誤差が「丸め誤差」です。