情報落ち
誤差とは
コンピュータは8ビットや32ビットなどのようにあらかじめ決められたビット数の範囲で数をあらわします。そうすると「表現できる数の範囲」が決まります。
例えば32ビット形式の浮動小数点数は、全体は32ビットで構成されています。
このように限られたビット数で数をあらわすため、仮数部で表現できる数の範囲を超えてしまうことがあります。表現できる数の最小値を超えることを「アンダーフロー」、最大値の数を超えることを「オーバーフロー」といいます。
例えば、2÷3 = 0.6666666...のように割り切れなくて無限に続く小数のことを「無限小数」といいます。
コンピュータはあらかじめ決められた範囲で数をあらわします。そのため無限小数のような数は決められた範囲に収まりません。
これらの数をコンピュータであらわす時は「なるべく近い値」を使います。その結果、実際の値と誤差が生じてしまうわけです。
誤差は様々なケースで発生します。本記事では「情報落ち」について紹介しています。
情報落ちとは
情報落ちとは、コンピュータで絶対値の大きな値と小さい値の加減算を行った際に、小さい値の情報が無視されてしまうことによって生じる誤差のことです。
例えば 仮数部の有効桁数が4桁である「0.1234 × 10^2」と「0.1234 × 10^-2」の和を求めてみます。※説明のため10進数を例にしています。
「0.1234 × 10^2」と「0.1234 × 10^-2」の和を求めると
0.1234 × 10^2 + 0.00001234 × 10^2 = 0.12341234 × 10^2
答えは「0.12341234 × 10^2」です。浮動小数点数なので、正規化を行います。
仮数部の有効桁数は4桁なので正規化した結果は「0.1234 × 10^2」です。
小さい数である「0.00001234」は仮数部の有効桁数からはみ出してしまうため、なかったことにされてしまうのです。これが情報落ちです。