基本情報技術者 2015年 春期 午前(科目A) 問02
問題文
桁落ちの説明として、適切なものはどれか。
選択肢
ア:値がほぼ等しい浮動小数点数同士の減算において、有効桁数が大幅に減ってしまうことである。(正解)
イ:演算結果が、扱える数値の最大値を超えることによって生じるエラーのことである。
ウ:浮動小数点数の演算結果について、最小の桁よりも小さい部分の四捨五入、切上げ又は切捨を行うことによって生じる誤差のことである。
エ:浮動小数点数の加算において、一方の数値の下位の桁が結果に反映されないことである。
🔒 解説は解答すると表示されます
桁落ち(キャンセレーション誤差)【午前解説】
正解の理由
選択肢アは「値がほぼ等しい浮動小数点数同士の減算において、有効桁数が大幅に減ってしまうことである。」と述べており、桁落ち(catastrophic cancellation)の典型的かつ正確な定義を示しています。
浮動小数点は仮数部に有限桁しか持たないため、ほぼ等しい数同士の減算では有効な上位桁が相殺され、結果の有効桁数が急激に減少して誤差が相対的に増大します。これは桁落ちを最も端的に表す説明です。
浮動小数点は仮数部に有限桁しか持たないため、ほぼ等しい数同士の減算では有効な上位桁が相殺され、結果の有効桁数が急激に減少して誤差が相対的に増大します。これは桁落ちを最も端的に表す説明です。
解法ステップ
- 問題文のキーワードを確認:「値がほぼ等しい」「減算」「有効桁数が減る」。
- 桁落ちの定義(catastrophic cancellation)はまさに「ほぼ等しい数の減算で生じる有効桁の喪失」であることを思い出す。
- 他選択肢と照合:イはオーバーフロー、ウは丸め(切り捨て・切り上げ)や打ち切り誤差、エは加算における小数部の吸収を説明しており、桁落ちの定義と一致しないことを確認する。
- 最終的に選択肢アが正しいと判定する。
選択肢別の誤答解説
- ア: 正解。値がほぼ等しい浮動小数点数同士の減算で有効桁が失われる現象、すなわち桁落ち(catastrophic cancellation)を正しく表現しています。
- イ: 誤り。演算結果が表現可能な最大値を超えるのは「オーバーフロー(溢れ)」であり、桁落ちとは別の現象です。
- ウ: 誤り。最小桁より小さい部分を四捨五入・切上げ・切捨てることで生じる誤差は一般に「丸め誤差(rounding error)」や「切り捨て誤差」と呼ばれるもので、桁落ちの定義とは異なります。
- エ: 誤り。加算で一方の数値の下位桁が結果に反映されない現象は「吸収(absorption)」や丸めによる無視に相当し、典型的な桁落ち(ほぼ等しい数の減算)とは区別されます。
よくある誤解
- 桁落ちを「単なる丸め誤差」と混同する誤解: 丸め誤差は一般的な誤差の総称であり、桁落ちは特に“差が小さい減算”に伴う有効桁の喪失を指します。
- 桁落ちは「加算でも同様に起きる」との誤解: 加算で小さい数が無視される現象はあるが、桁落ち(catastrophic cancellation)は主に減算で顕著です。加算での無視は「吸収(absorption)」や丸めによる消失と呼ばれることが多いです。
- 「高精度にすれば問題ない」と考える誤解: 高精度で軽減できますが、根本対策は式の変形(打ち消しを避ける)や補償アルゴリズムの適用です。
補足コラム
桁落ちは数値計算で致命的な誤差源になり得ます。実例として二次方程式の解の公式:
で の場合、減算による桁落ちが起きやすく、数値解の精度が著しく低下します。この問題には式の変形(例えば別の公式を使う)や高精度演算、補償アルゴリズムの適用が有効です。
Pythonでの簡単なデモ(浮動小数点精度の喪失を確認):
a = 1.234567890123456
b = 1.234567890123455
print(a - b) # 浮動小数点では小さい差の精度が失われる
対策例:
- 数式の代替表現で減算を避ける
- 高精度ライブラリ(decimal, mpmath)や倍精度以上(longdouble)の利用
- Kahan 和などの補償アルゴリズム
FAQ
Q1: 桁落ちは必ず悪影響を及ぼしますか?
A1: 必ずしもそうではありません。差の絶対誤差が小さくて目的に対して十分なら問題になりません。ただし相対誤差や下流計算への影響を考慮する必要があります。
A1: 必ずしもそうではありません。差の絶対誤差が小さくて目的に対して十分なら問題になりません。ただし相対誤差や下流計算への影響を考慮する必要があります。
Q2: 桁落ちを学ぶ上で押さえるべき指標は何ですか?
A2: 絶対誤差、相対誤差、有効数字(有効桁数)を区別して考えることが重要です。
A2: 絶対誤差、相対誤差、有効数字(有効桁数)を区別して考えることが重要です。
Q3: 桁落ちを完全に防げますか?
A3: 完全に防ぐことは難しいですが、式変形、高精度演算、補償手法で実用上は十分に抑えられます。
A3: 完全に防ぐことは難しいですが、式変形、高精度演算、補償手法で実用上は十分に抑えられます。
関連キーワード: 浮動小数点, 桁落ち, 丸め誤差, オーバーフロー, 吸収, 打ち消し, Kahan 和, 有効桁数, 数値解析, 精度管理

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

