離散数学 06:算術演算と精度の落とし穴
コンピュータの計算は、数学の理想的な実数計算とは違います。ビット数に限りがあるため、表せる範囲と精度に限界があります。試験では、オーバーフロー、アンダーフロー、丸め誤差、桁落ち、情報落ちがよく出ます。
オーバーフローとアンダーフロー
オーバーフローは、計算結果が表現可能な最大値を超えることです。アンダーフローは、絶対値が小さすぎて表現できない、または 0 に近づきすぎることです。
整数だけでなく、浮動小数点数でも範囲外になることがあります。
丸め誤差
丸め誤差は、表現できる桁数に限りがあるために、近い値へ丸めることで生じる誤差です。10進数の 1/3 が 0.333... と続くのと同じように、2進数では 0.1 が有限で表せないことがあります。
桁落ち
桁落ちは、近い値同士を引き算したとき、有効な桁が大きく失われる現象です。例えば 1.234567 と 1.234566 の差は 0.000001 ですが、元の値に比べて有効数字が一気に減ります。
情報落ち
情報落ちは、非常に大きい数と非常に小さい数を足したとき、小さい数の情報が計算結果に反映されにくくなる現象です。例えば、大きな値に 0.000001 を足しても、保持できる桁数の都合で変化が消えることがあります。
試験での見方
誤差の名前を丸暗記するより、どんな演算で起きるかを結び付けます。
- 範囲を超える: オーバーフロー
- 0 に近すぎる: アンダーフロー
- 桁数制限で丸める: 丸め誤差
- 近い数の引き算: 桁落ち
- 大きい数と小さい数の足し算: 情報落ち
確認問題
近い値どうしを引くと目立つ誤差は何でしょうか。
答えは桁落ちです。