(4)桁落ち

値がほぼ等しく丸め誤差をもつ数値どうしの減算を行った場合、有効数字が減少すること。
絶対値がほぼ等しく符号が異なる数値どうしの加算の場合も同様。
浮動小数点数では、上位の桁がゼロになると、正規化によってそれを詰め、
以下の桁に"0" を強制的に挿入するので、下位の桁が信頼できないものになる。
特別な場合には、演算式を変形することによって、桁落ちを避けることができる。


これは上記wikipediaから引用した部分は理解できるのだが、その後の例が
いまいち理解できなかったので、以下の例で実例としては理解。
http://rryu.sakura.ne.jp/compfund/backnumber/compfund057.txt


でもまぁ。wikipdeiaにあるように、

浮動小数点数では、上位の桁がゼロになると、正規化によってそれを詰め、以下の桁に"0" を強制的に挿入するので、下位の桁が信頼できないものになる。』

ってことですね。

■ 桁落ち ■

 今度は逆に、ほぼ等しい数値を減算すると起こるのが「桁落ち」です。
桁落ちとは、ほぼ等しい数値を減算したことにより、通常の減算よりも有効桁
数が減少することをいいます。ほぼ等しい数値というのは、上位桁は等しく下
位桁だけが異なるという状態になっています。そこで減算を行うと上位桁は相
殺され0になり、わずかな下位桁だけの差が結果に現れます。有意な数値を保
持している桁数が減るので桁落ちというわけです。


有効桁数24桁
┌────────────┐
1.11111111111111111110111×2^(+10)
+) 1.11111111111111111110001×2^(-10)
-------------------------------------
0.00000000000000000000110×2^(-10)
1.10000000000000000000000×2^(-31)
└─┘
有効桁数2桁


 そもそも有効桁数とはなんでしょうか。たとえば財布に入っている金額を訊
かれたとします。千円札1枚だけが入っているのならば、あなたは「1000円」
だと答えることができます。この場合の金額の有効桁数は4桁となります。1円
単位まで確定しているからです。

100円玉が9枚あるのは分かるが、10円玉や1円玉がたくさんあって分からない
という場合、あなたは「約1000円」と答えるでしょう。表現上の桁数は4桁あ
りますが、この場合の有効桁数は2桁です。10円や1円単位の桁が確定していな
いからです。975円が切り上げられて1000円になったのかもしれませんし、あ
るいは1018円が切り下げられて1000円になったのかもしれません。このよう
に、はっきり確定している部分の桁数が有効桁数というわけです。

 有効桁数が減少すると確実に計算精度が悪くなります。そして一度減った有
効桁数は回復することはできません。つまり減ったら減った分だけ計算精度が
悪くなっていきます。計算によって有効桁数以外の部分にも0以外の数が入る
かもしれませんが、それが正しいという保証はありません。有効桁数以上の部
分は信用できないので、精度を回復することはできないのです。

 桁落ちでもっとも大切なことは、浮動小数点数仮数や指数のビット数にか
かわらず発生するという点です。仮数のビット長を増やしたからといって改善
するものでも無いのです。

 桁落ちを防ぐ最も確実な方法は減算を行わないことです。といってもそんな
ことは不可能なので、たとえ減算が起こるにしても、ほぼ等しい数値の減算で
はなくなるように式を変形するという方法がいくつか知られています。