応用情報技術者 2019年 春期 午前2 問02
問題文
桁落ちによる誤差の説明として、適切なものはどれか。
選択肢
ア:値がほぼ等しい二つの数値の差を求めたとき、有効桁数が減ることによって発生する誤差(正解)
イ:指定された有効桁数で演算結果を表すために、切捨て、切上げ、四捨五入などで下位の桁を削除することによって発生する誤差
ウ:絶対値が非常に大きな数値と小さな数値の加算や減算を行ったとき、小さい数値が計算結果に反映されないことによって発生する誤差
エ:無限級数で表される数値の計算処理を有限項で打ち切ったことによって発生する誤差
🔒 解説は解答すると表示されます
桁落ち【午前2解説】
正解の理由
設問の説明に合致するのは ア です。桁落ち(catastrophic cancellation)は「値がほぼ等しい二つの数値の差をとる際に、有効桁数が大幅に減少して誤差が増大する現象」を指します。差を取ることで有効な上位桁が打ち消され、下位桁の丸め誤差や表現誤差が相対的に大きくなるため、結果の精度が著しく低下します。
解法ステップ
- 設問のキーワードを確認:「値がほぼ等しい」「差を求めたとき」「有効桁数が減る」などの語句を探す。
- 「差によって有効桁数が減る」現象が桁落ちの定義と一致するか照合する。
- 他の選択肢が示す誤差タイプ(丸め誤差、吸収、打ち切り誤差)と用語を区別する。
- 用語の定義に合致する選択肢を選ぶ(ここでは ア)。
選択肢別の誤答解説
- ア(正解): 差を取ることで上位桁がキャンセルされ、有効桁数が減少する説明は桁落ちそのものです。
- イ: 切り捨て・切上げ・四捨五入などによって生じる誤差は「丸め誤差(rounding error)」であり、桁落ちとは区別されます。丸めは単独で生じる誤差の種類です。
- ウ: 「非常に大きな数値と小さな数値の加算や減算で小さい数値が反映されない」現象は、有限精度による丸めによって小さい項が消える“吸収(absorption)”または丸めによる情報の喪失です。これは桁あふれ(オーバーフロー)ではなく、加算時の丸め・情報消失に分類されます。
- エ: 無限級数を有限項で打ち切ることで生じる誤差は「打ち切り誤差(truncation error)」であり、桁落ちとは別の概念です。
よくある誤解
- 桁落ちと桁あふれ(オーバーフロー)を混同する。桁落ちは有効桁数の消失(主に差の操作)、桁あふれは表現可能な範囲を超える現象で別物です。
- ウの現象を「オーバーフロー」と誤分類する。ウは小さい数が丸められて消える「吸収」であり、オーバーフローではありません。
- 桁落ちは必ず丸め誤差と同義だと考える。桁落ちは差に特有の有効数字の喪失で、丸め誤差は広く発生する別の原因です(両者が同時に問題を大きくすることはある)。
補足コラム
桁落ちは数値計算で深刻な精度劣化を引き起こすことがあり、特に次のような場面で問題になります。
- 二次方程式の解を直接公式で計算する場合: の形で のとき差で桁落ちが起きる。対策としては次のように計算を変形します。 そして解を とする方法は桁落ちを回避します。
- 総和(多くの数の加算)では Kahan の補償付き和などのアルゴリズムで丸めによる情報喪失を抑えることができます。
- 他の対策:式の再整理、高精度(多倍長)を使う、数値的に安定なアルゴリズムを選ぶ。
簡単な数値例(概念説明):
有限の有効桁数で 1.234567 と 1.234560 の差を取ると、上位桁が打ち消されて残る桁数が極端に少なくなり、丸め誤差の影響が大きくなります(これが桁落ち)。
Python での簡易実験(省略可):
# double precision の例(吸収や桁落ちの挙動を観察)
a = 1e16
b = 1.0
print((a + b) - a) # 0.0 に近くなる(吸収)
# 桁落ちの例は差がほぼ等しい場合に現れる
x = 1.234567890123456
y = 1.234567890123450
print(x - y) # 非常に小さい差だが、浮動小数点精度の影響を受ける
FAQ
Q1: 桁落ちをどうやって見分けるか?
A1: 計算で「ほぼ等しい」値同士の差が出る箇所を注視します。結果が期待より急に不安定・ノイズっぽくなる場合は桁落ちの可能性があります。条件分岐や解析的な代替式で検出・回避可能です。
A1: 計算で「ほぼ等しい」値同士の差が出る箇所を注視します。結果が期待より急に不安定・ノイズっぽくなる場合は桁落ちの可能性があります。条件分岐や解析的な代替式で検出・回避可能です。
Q2: 丸め誤差と桁落ちの違いは?
A2: 丸め誤差は有限精度表現による下位桁の削除全般を指し、桁落ちは特に差を取る操作で上位桁が相殺され相対的に小さな丸め誤差が支配的になる現象です。両者は関連しますが同義ではありません。
A2: 丸め誤差は有限精度表現による下位桁の削除全般を指し、桁落ちは特に差を取る操作で上位桁が相殺され相対的に小さな丸め誤差が支配的になる現象です。両者は関連しますが同義ではありません。
Q3: 実務での有効な対策は?
A3: 式の代数的変形による安定化、補償付き和やKahanアルゴリズムの利用、高精度演算ライブラリの使用が有効です。
A3: 式の代数的変形による安定化、補償付き和やKahanアルゴリズムの利用、高精度演算ライブラリの使用が有効です。
関連キーワード: 浮動小数点、丸め誤差、吸収(情報消失)、打ち切り誤差、有効桁数、数値安定性

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

