浮動小数点で起こる誤差の種類と回避策。実務でも金融計算等で重要なテーマです。
0.1 + 0.2 が 0.30000000000004 になっちゃう、あれだよね?
そう、典型例ね。
浮動小数点演算では4種類の誤差が発生しうるの。
4つを覚えて: 丸め誤差 (有限桁での切捨て)、打切り誤差 (無限級数を途中で止める)、桁落ち (近い値同士の引き算で有効桁が消える)、情報落ち (大小の値の加算で小が消える)。
桁落ちって、どんな場面で起こるんですかぁ?
例: 1.000001 - 1.000000 = 0.000001。
元は7桁の精度があったのに、結果は1桁しか有効じゃなくなるの。
これが桁落ち。
二次方程式の解の公式で対処することもあるわ。
金融計算では誤差が許されないから、整数 (cent単位) やBCD (Binary-Coded Decimal) を使うのが原則なのよ。
Python の Decimal 型なども同じ思想ね。
試験では「次の計算で発生する誤差は何か」「桁落ちが起こるのはどの場合か」といった問題が頻出よ。
要は、プログラミング言語で float を金額計算に使っちゃダメってことだね!
確認クイズ
1.000001 - 1.000000 のような近い値同士の引き算で、有効桁が大幅に失われる誤差を何と呼ぶか。
- 丸め誤差
- 打切り誤差
- 桁落ち
- 情報落ち
こたえを見る
正解: 3. 桁落ち
桁落ちは、値が近い数同士の引き算で発生し、本来あった有効桁数が大幅に減ってしまう誤差です。物理計算や統計計算で問題になりやすく、計算順序の工夫で回避します。