応用情報技術者 2022年 春期 午前2 問01
問題文
浮動小数点数を、仮数部が7ビットである表示形式のコンピュータで計算した場合、情報落ちが発生しないものはどれか。ここで、仮数部が7ビットの表示形式とは次のフォーマットであり、内は2進数、Y は指数である。また、{ }内を先に計算するものとする。
選択肢
ア:(正解)
イ:
ウ:
エ:
🔒 解説は解答すると表示されます
浮動小数点の情報落ち【午前2解説】
正解の理由
問題設定の仮数部は「先頭の 1 を含めて ビットの有効精度」を持つと扱います。異なる指数同士の加減算では、指数を揃えるために小さい方の仮数を右にシフトします。シフト量(指数差)が を超えると小さい方のすべての有効ビットが失われ、情報落ち(切り捨て)が起きます。各選択肢を順に計算すると、ア の場合のみ次のように「内側で小さい数同士を先に足して指数が上がり、外側の大きな数との差がちょうど になる」ため情報落ちが生じません。具体的には内側で
となり、外側の との指数差は で、シフト量がちょうど のため最下位ビットが残り加算できるからです。
解法ステップ
- 仮数ビット数を とする(先頭 1 を含めて有効ビット数が 7 ビット)。
- 各選択肢について、まず中括弧内の演算を行い(指数を揃えて仮数演算)、その結果を正規化して指数を確定する。
- 中括弧の結果と残りの項の指数差 を計算する。もし なら小さい方は丸ごと失われる(情報落ち)。 なら最下位ビットまで保持される(情報落ちしない)。
- これを各選択肢に適用して判定する。
選択肢別の誤答解説
- ア: {}
内側:(損失なし)。外側との指数差は 。差が と等しいため、内側の最上位ビットが外側の最下位ビット位置に対応し、例えば大きい方を (7ビット)とすると小さい方は (7ビット目)として加算され、合算後も最下位ビットが残る。したがって情報落ちは発生しない。よって解答は ア。 - イ: {}
内側:(ここで情報落ちは起きない)。しかし外側との指数差は で 。このため外側に合わせる際に内側の全有効ビットが右に 8 ビット分シフトされ、丸ごと消えてしまい情報落ちが発生する。重要なのは「減算そのものではなく、その後の大きな数との加算で失われる」点。 - ウ: {}
内側:指数差 のため、内側の加算で小さい方 が丸ごと失われ、結果は のままになる。次に残りの と比べても差は であり、これも失われる。したがって情報落ちが発生する。 - エ: {}
内側:指数差 より内側の小さい項は内側演算で捨てられ、結果は 。その後 を足す際の差は であり、これも捨てられる。情報落ちが起きる。
(要点)情報落ちが起きるかは「どの演算で指数差が生じるか」を順序通りに追って判断する。中括弧内での減算・加算が無損かどうかだけで結論を出してはいけない。
よくある誤解
- 減算(小さい数同士)をすると必ず情報落ちする:必ずしもそうではありません。小さい数同士の差がさらに小さくなっても、その後に大きな数と加算する際の指数差が問題になります。どの段階で大きな数と合わせるかが鍵です。
- 「指数差が等しい場合も失う」と誤解する:差が と等しい場合、最下位ビットが残るため情報落ちとはならない(差が のとき丸ごと失われる)。この「等しい/超える」の判定を間違いやすいです。
- 仮数ビット数の数え方の混乱:問題文の表記()は「先頭の 1 を含めて ビットの有効桁」として扱うと設問の閾値 に対応します。ここを明確にして考えること。
補足コラム
- 実装上は丸め(round-to-nearest など)やガードビット、ラウンドビット、スティッキービットを用いることが多く、完全な「丸ごと消失」が起きるかどうかは丸め規則によって微妙に変わる場合があります。本問題は簡潔化のため「仮数 ビットでシフト量が なら小さい方は完全に失われる」というモデルで解きます。
- 正規化の結果がちょうど桁溢れ・桁下がりする場合の扱いや非正規化数(denormalized)は本問の範囲外ですが、実機の詳細実装では考慮されます。
FAQ
Q. なぜ「差が 7(=仮数ビット数)なら大丈夫」で「8ならだめ」なのですか?
A. 仮数 ビットを持つとき、右に ビットシフトすると元の最上位ビットがちょうど最下位ビット位置に入るためそのビットは残ります。右に ビット以上シフトするとすべての有効ビットが捨てられます。本問では と扱っています。
A. 仮数 ビットを持つとき、右に ビットシフトすると元の最上位ビットがちょうど最下位ビット位置に入るためそのビットは残ります。右に ビット以上シフトするとすべての有効ビットが捨てられます。本問では と扱っています。
Q. 減算で桁落ち(キャンセレーション)が起きると後で必ず情報落ちしますか?
A. いいえ。減算による桁落ちは結果の有効桁が減ることを意味しますが、その直後の演算でそれがさらに大きな数と加算されるかどうかが重要です。実際に情報落ちするのは「指数差が閾値を超える演算」を行う時点です。
A. いいえ。減算による桁落ちは結果の有効桁が減ることを意味しますが、その直後の演算でそれがさらに大きな数と加算されるかどうかが重要です。実際に情報落ちするのは「指数差が閾値を超える演算」を行う時点です。
関連キーワード: 浮動小数点、情報落ち、仮数ビット、指数差、丸め誤差

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

