「桁落ち」による誤差ついて

情報処理技術者試験で問われたことがあったので、「桁落ち」という現象と、それによっておこる誤差について述べます。

「桁落ち」を理解するためには有効数字による有効桁数を理解する必要があります。
有効桁数とは有効数字で構成された桁の数です。

これが問題になるのは浮動小数点数を取り扱う場合です。

物理の世界では測定値が信頼される数字となります。
例えば、測定によって得られた数値1.2と1.20は異なる意味を持ちます。

1.2は小数点第2位の数値は0なのかどうかわかりません。(測定できていない)
1.20は小数点第2位は0であると信頼できます。

浮動小数点数では正規化を行い、次のように表現します。

仮数部 × 基数指数部

例として、次のような数を挙げてみます。

1.234 × 10-6

これは仮数部が有効数字が4つ(1.234)で構成されているので、有効桁数は4桁となります。

次に、この数に近い数1.233 × 10-6で引いてみます。

1.234 × 10-6 – 1.233 × 10-6
= 0.001 × 10-6
= 1.0 × 10-9

仮数部は正規化される決まりになっています。
有効桁数は4桁(1.2341.233)から1桁(1.0)へ減ってしまいました。

このように、ふたつの数値の差が0に近い場合、減算により有効桁数が著しく減る現象「桁落ち」といいます。

加えて、1.0の小数部0は正規化のために埋めているだけなので、”信頼できる数値”ではありません。

コンピュータの仕組みとして、浮動小数点数の表現には符号、指数部、仮数部の3つに対して有限の領域が与えられます。
※コンピュータは2進数の世界なので、基数は2となります。

ほぼ同じ値が減算したのち有効桁が減った状態で”本来あったかもしれない”その桁以下の値は、すべて0(ゼロ)、すなわち信頼できない値で埋められる(埋めざるを得ない)ことになります。

これにより誤差が発生すれば、それは桁落ちによる誤差ということになります。
計算の仕方によっては無視できないほど大きな誤差に発展する場合もあります。

誤差は計算の順番によって回避または軽減できる場合もありますが、そもそも2値だけの減算では不可避となります。