令和4年度 春期 応用情報技術者試験 午前 問題 問1

浮動小数点数を,仮数部が7ビットである表示形式のコンピュータで計算した場合,情報落ちが発生しないものはどれか。ここで,仮数部が7ビットの表示形式とは次のフォーマットであり,()2(\quad)_2 内は2進数,YY は指数である。また,{}\{\quad\} 内を先に計算するものとする。

(1.X1X2X3X4X5X6X7)2×2Y(1. X_1 X_2 X_3 X_4 X_5 X_6 X_7)_2 \times 2^Y

解答・解説

正解: ア. {(1.1)2×2−3+(1.0)2×2−4}+(1.0)2×25\{(1.1)_2 \times 2^{-3} + (1.0)_2 \times 2^{-4}\} + (1.0)_2 \times 2^5

情報落ちとは、絶対値の大きさが極端に異なる浮動小数点数同士の加減算を行った際、絶対値の小さい方の数の有効数字が下位に追いやられ、計算結果に反映されずに失われてしまう誤差のことです。これを防ぐためには、絶対値の小さい数同士を先に計算し、その結果を絶対値の大きい数と計算する必要があります。

問題の表示形式では、仮数部は小数点以下7ビット(X1X_1 から X7X_7)まで保持できます。
各選択肢について、{}\{\quad\} 内から順に計算し、仮数部が7ビットに収まるかを確認します。

アの計算(正解)

  1. 小さい数同士の加算: (1.1)2×2−3+(1.0)2×2−4(1.1)_2 \times 2^{-3} + (1.0)_2 \times 2^{-4}
    指数を −3-3 に合わせます。
    (1.1)2×2−3+(0.1)2×2−3=(10.0)2×2−3(1.1)_2 \times 2^{-3} + (0.1)_2 \times 2^{-3} = (10.0)_2 \times 2^{-3}
    正規化すると (1.0)2×2−2(1.0)_2 \times 2^{-2} となります。

  2. 大きい数との加算: (1.0)2×2−2+(1.0)2×25(1.0)_2 \times 2^{-2} + (1.0)_2 \times 2^5
    指数を 55 に合わせます。
    (0.0000001)2×25+(1.0)2×25=(1.0000001)2×25(0.0000001)_2 \times 2^5 + (1.0)_2 \times 2^5 = (1.0000001)_2 \times 2^5
    計算結果の仮数部は小数点以下7ビットであり、表示形式にちょうど収まるため情報落ちは発生しません。

各選択肢の解説

  • ア: 上記の通り、小さい数同士を先に足すことで桁が上がり、その後の大きい数との計算結果が小数点以下7ビットに収まるため情報落ちは発生しません。
  • イ:
    1. 小さい数同士の減算: (1.1)2×2−3−(1.0)2×2−4(1.1)_2 \times 2^{-3} - (1.0)_2 \times 2^{-4}
      (1.1)2×2−3−(0.1)2×2−3=(1.0)2×2−3(1.1)_2 \times 2^{-3} - (0.1)_2 \times 2^{-3} = (1.0)_2 \times 2^{-3}
    2. 大きい数との加算: (1.0)2×2−3+(1.0)2×25(1.0)_2 \times 2^{-3} + (1.0)_2 \times 2^5
      指数を 55 に合わせると (0.00000001)2×25+(1.0)2×25=(1.00000001)2×25(0.00000001)_2 \times 2^5 + (1.0)_2 \times 2^5 = (1.00000001)_2 \times 2^5 となります。
      小数点以下8ビット目に 11 が立ちますが、仮数部は7ビットまでしか保持できないため、最下位の 11 が失われて情報落ちが発生します。
  • ウ:
    1. 大きい数と小さい数の加算: (1.0)2×25+(1.1)2×2−3(1.0)_2 \times 2^5 + (1.1)_2 \times 2^{-3}
      指数を 55 に合わせると (1.0)2×25+(0.000000011)2×25=(1.000000011)2×25(1.0)_2 \times 2^5 + (0.000000011)_2 \times 2^5 = (1.000000011)_2 \times 2^5 となります。
      小数点以下8、9ビット目の 1111 が7ビットの仮数部に収まらないため、この時点で失われ情報落ちが発生します。
  • エ:
    1. 大きい数と小さい数の減算: (1.0)2×25−(1.0)2×2−4(1.0)_2 \times 2^5 - (1.0)_2 \times 2^{-4}
      指数を 55 に合わせると (1.0)2×25−(0.000000001)2×25(1.0)_2 \times 2^5 - (0.000000001)_2 \times 2^5 となります。
      仮数部7ビットより下位の桁を減算しようとするため、値を7ビットに収める際に情報落ちが発生します。

Spineチーム