打切り誤差
誤差とは
コンピュータは8ビットや32ビットなどのようにあらかじめ決められたビット数の範囲で数をあらわします。そうすると「表現できる数の範囲」が決まります。
例えば、32ビット形式の浮動小数点数は、全体は32ビットで構成されています。
このように限られたビット数で数をあらわすため、仮数部で表現できる数の範囲を超えてしまうことがあります。表現できる数の最小値を超えることを「アンダーフロー」、最大値を超えることを「オーバーフロー」といいます。
例えば、2÷3 = 0.6666666...のように割り切れなくて無限に続く小数のことを「無限小数」といいます。10進数の0.1を2進数に変換すると 0.0001100110011... となり、これも「無限小数」です。
コンピュータはあらかじめ決められた範囲で数をあらわします。そのため、無限小数のような数は決められた範囲に収まりません。
これらの数をコンピュータであらわす時は「なるべく近い値」を使います。その結果、実際の値と誤差が生じてしまうわけです。
誤差には「丸め誤差」「打切り誤差」「桁落ち」「情報落ち」などがあります。本記事では「打切り誤差」について紹介しています。
打切り誤差とは
打切り誤差とは、コンピュータでの計算処理を途中で打ち切ることにより発生する誤差のことです。
例えば次のような計算があるとします。※説明のため10進数を例にしています。
1 ÷ 3 = 0.3333333333333...
上記のように「無限小数」などの計算をコンピュータで行う場合、無限回の計算を行うわけにはいかないため、途中で計算を打ち切ります。その結果、正しい結果との間に誤差が発生します。この時に発生する誤差が「打切り誤差」です。
また、違う例では円周率「3.14159265358979323846264338327950288...」の計算を「3.14」などのように打ち切って計算した結果、発生する誤差も「打切り誤差」です。