基本情報技術者 2025年 科目A 問02
問題文
浮動小数点形式で表現された数値の演算結果における丸め誤差の説明はどれか。
選択肢
ア:演算結果がコンピュータの扱える最大値を超えることによって生じる誤差である。
イ:数表現の桁数に限度があるので、最下位桁より小さい部分について四捨五入や切上げ、切捨てを行うことによって生じる誤差である。(正解)
ウ:乗除算において、指数部が小さい方の数値の仮数部の下位部分が失われることによって生じる誤差である。
エ:絶対値がほぼ等しい数値の加減算において、上位の有効数字が失われることによって生じる誤差である。
🔒 解説は解答すると表示されます
浮動小数点の丸め誤差【午前解説】
正解の理由
浮動小数点数は仮数部(有効桁数)に制限があるため、演算の結果がその桁数で正確に表現できない場合に、最下位桁以下を切り捨て・切り上げ・四捨五入する処理が行われます。この処理によって発生する誤差が丸め誤差です。したがって選択肢イの説明が当てはまります。
解法ステップ
- 問題文で「丸め誤差」という語から、どのような状況で発生するか(桁数制限によるもの)を思い出す。
- 各選択肢のキーワードに注目する(「最大値を超える」「桁数に限度」「乗除算」「上位の有効数字が失われる」など)。
- 桁数制限→四捨五入等=丸め誤差、最大値超過=オーバーフロー、上位桁の喪失=桁落ち(差の打ち消し)と対応付ける。
- 最も一致するのがイであると決定する。
選択肢別の誤答解説
- ア: 「演算結果がコンピュータの扱える最大値を超える」→ これはオーバーフロー(または正の無限大への飽和)に関する説明であり、丸め誤差とは異なります。
- イ: 仮数部の桁数制限により下位の情報を丸めることによって生じる誤差、すなわち丸め誤差を正しく説明しています。
- ウ: 「乗除算において、指数部が小さい方の数値の仮数部の下位部分が失われる」→ 仮数の下位が失われる現象は主に加減算で、桁合わせ(シフト)時に起きます。乗除算では通常仮数同士を乗除して正規化するため、この記述は不正確です。
- エ: 「絶対値がほぼ等しい数値の加減算において、上位の有効数字が失われる」→ これは桁落ち(差の打ち消し、catastrophic cancellation)と呼ばれる別の問題で、丸め誤差とは発生原因が異なります(結果として丸めが関与することはあるが、定義上は区別される概念です)。
よくある誤解
- 丸め誤差とオーバーフローを混同する:どちらも「誤差」や異常な結果につながるが、原因は異なる(桁数制限 vs 値の範囲超過)。
- 「桁落ち(差の打ち消し)」を丸め誤差と同一視する:桁落ちは上位桁が打ち消されて有効桁数が失われる現象で、丸めとは区別して考えるべきです。
- 浮動小数点演算は常に小さな誤差しか生じないと過信する:累積や特定のアルゴリズムでは誤差が増幅することがあります。
補足コラム
- IEEE 754 規格では丸めモード(最近接丸め、0方向丸め、+∞/−∞方向丸めなど)が定義されています。多くの実装で既定は「最近接偶数丸め(round to nearest, ties to even)」です。
- 機械イプシロン(machine epsilon)は「1 と次に表現できる浮動小数点数との差」で、2進の有効ビット数 に対して概ね です。これが丸め誤差の大きさの目安になります。
- ガードビット、ラウンドビット、スティッキービットなどは、加算時の桁合わせと丸めの精度を改善するために用いられます。
- 丸め誤差や桁落ちへの対策例:高精度(多倍長)演算、Kahanの補正和、アルゴリズムの数値安定化、必要なら十進固定小数点やDecimalを使う(金融計算など)。
簡単な Python 実例:
# 浮動小数点の丸めを示す例
a = 0.1 + 0.2
print(a == 0.3) # False になることが多い
print(a) # 端数が表示される
# Decimal を使うと十進丸めの問題を回避できる場合がある
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3')) # True
FAQ
Q: 丸め誤差を完全になくせますか?
A: 浮動小数点表現の限界から完全にはなくせません。数値安定なアルゴリズムや高精度型、十進演算を使うことで実用上問題ない精度に抑えることができます。
A: 浮動小数点表現の限界から完全にはなくせません。数値安定なアルゴリズムや高精度型、十進演算を使うことで実用上問題ない精度に抑えることができます。
Q: 丸め誤差と桁落ちはどちらが厄介ですか?
A: 両方問題ですが、桁落ちは誤差が大きく増幅されることがあり、特に注意が必要です。場合によっては桁落ちを避けるために式変形が有効です。
A: 両方問題ですが、桁落ちは誤差が大きく増幅されることがあり、特に注意が必要です。場合によっては桁落ちを避けるために式変形が有効です。
Q: 丸めモードを変えると結果はどう変わりますか?
A: 丸めモードを変えると同じ演算でも最下位の丸め方が変わるため、わずかに異なる結果になります。数値解析で厳密な再現性が必要なら丸めモードの扱いに注意してください。
A: 丸めモードを変えると同じ演算でも最下位の丸め方が変わるため、わずかに異なる結果になります。数値解析で厳密な再現性が必要なら丸めモードの扱いに注意してください。
関連キーワード: IEEE754、丸め誤差、機械イプシロン、桁落ち(差の打ち消し)、オーバーフロー、アンダーフロー、丸めモード、ガードビット

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

