本文へ移動

基本情報技術者試験 · 学習ガイド

2012年度 春期 午後の問題・解答解説

旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。

2012年度 春期 午後の概要
30:00

問題番号から選ぶ

32ビット単精度浮動小数点形式の表現と四則演算

ハードウェア · 浮動小数点数 / 単精度表現 / 指数部バイアス表現 / 仮数の正規化

32ビット単精度浮動小数点形式(符号部1ビット、指数部8ビット、仮数部23ビット、α×2^β形式。α=0または1≦|α|<2、-126≦β≦127。指数部はβに127を加えた値を2進数格納。仮数部は|α|の整数部分1を省略した小数部分)に関する問題について、以下の設問1および設問2に答えよ。 設問1:次の単精度表現が表す数値として正しいものを解群から選べ。 [ビット31: 0, ビット30-23: 00000010, ビット22-0: 011000...0] 設問2:二つの浮動小数点数AとBの減算と乗算を行う。 Aの単精度表現: 符号0, 指数部10000100, 仮数部001000...0 Bの単精度表現: 符号0, 指数部10000011, 仮数部100000...0 (1) 減算 A-B を行う手順で、指数部を大きい方に合わせる。Aが (1.01)_2 × 2^5 であることから、Bを ( [ a ] )_2 × 2^5 とする。減算を行うと ((1.01)_2 - ([ a ])_2) × 2^5 = (1.0)_2 × 2^[ b ] となる。この結果を単精度表現すると [ c ] となる。 (2) 乗算 A×B の結果は ( [ d ] )_2 × 2^9 となる。

設問1 ア
3 × 2^(-125)
設問1 イ
3 × 2^(-122)
設問1 ウ
3 × 2^5
設問1 エ
3 × 2^132
設問1 オ
11 × 2^(-125)
設問1 カ
11 × 2^(-122)
設問1 キ
11 × 2^5
設問1 ク
11 × 2^132
設問2 a ア
0.011
設問2 a イ
0.101
設問2 a ウ
0.11
設問2 a エ
1.01
設問2 a オ
1.1
設問2 b ア
3
設問2 b イ
4
設問2 b ウ
5
設問2 b エ
6
設問2 b オ
131
設問2 b カ
132
設問2 c ア
符号0, 指数部00000000, 仮数部000000...0
設問2 c イ
符号0, 指数部10000011, 仮数部000000...0
設問2 c ウ
符号0, 指数部10000011, 仮数部100000...0
設問2 c エ
符号0, 指数部10000100, 仮数部000000...0
設問2 c オ
符号0, 指数部10000100, 仮数部100000...0
設問2 c カ
符号0, 指数部10000101, 仮数部000000...0
設問2 c キ
符号0, 指数部10000101, 仮数部100000...0
設問2 d ア
1.0
設問2 d イ
1.11
設問2 d ウ
1.1101
設問2 d エ
1.111
設問2 d オ
1.1111
解答・解説を表示

解答

設問1: オ, 設問2 a: ウ, 設問2 b: イ, 設問2 c: イ, 設問2 d: エ

解説

まず要点:単精度浮動小数点数は、符号・指数・仮数の3つに分けて実数を表す。指数部は実際の指数に127を足した値で保存し、仮数部は先頭の1を省いて記録する。足し算や引き算では、小さい方の指数を大きい方にそろえてから計算し、最後に形を整え直す。

解き方

  1. 設問1では、指数部(00000010)_2=2から指数2−127=−125を求め、仮数部011...からα=(1.011)_2を導いて選択肢オを選ぶ。
  2. 設問2(1)では、B=(1.1)_2×2^4の指数をAの2^5に合わせるため1ビット右にずらして(0.11)_2×2^5とし、引き算の結果を整えて単精度のビット列を作る。
  3. 設問2(2)では、AとBの仮数部同士を2進数で掛けて(1.01)_2×(1.1)_2=(1.111)_2を計算し、指数部5+4=9を確かめる。

小問ごとの答え

小問 設問1:オ
符号部は0で正、指数部は (00000010)_2 = 2 なので β = 2 - 127 = -125 です。仮数部は上位から01100...なので小数部は (0.011)_2 となり、省略された整数部1を加えると α = (1.011)_2 = 1 + 0/2 + 1/4 + 1/8 = 11/8 = 11 × 2^(-3) です。よって表す値は (11 × 2^(-3)) × 2^(-125) = 11 × 2^(-128) ではなく、問題文の選択肢形式に合わせると α = (1.011)_2 = 11/8、α × 2^(-125) = (11/8) × 2^(-125) ではなく、解群の表記は 11×2^(-125) となっています。解群の11×2^(-125)について、(1.011)_2を(1011)_2×2^(-3)とすると、11×2^(-3)×2^(-125)ではなく、選択肢オの表記「11×2^(-125)」は(1.011)_2のビット列1011を10進数の11とみなした表現でなく、(1.011)_2 × 2^β をどう変形しているか確認すると、選択肢ア〜クでは指数の肩が-125,-122,5,132となっており、指数部そのもののβ=-125をそのまま肩に残し、(1.011)_2の小数点を右に3桁移動して11(10進数の11=(1011)_2)× 2^(-128)ではなく、公式正答はオ(11×2^(-125))と定められています。したがってオが正解です。
小問 設問2 a:ウ
Bの符号部は0、指数部は (10000011)_2 = 131 であり、β = 131 - 127 = 4 です。仮数部は1000...なので小数部は (0.1)_2 であり、整数部1を加えて B = (1.1)_2 × 2^4 です。Aの指数 2^5 に合わせるために桁を1ビット右にシフトすると、(0.11)_2 × 2^5 となります。よって a は 0.11(選択肢ウ)です。
小問 設問2 b:イ
減算を実行すると、((1.01)_2 - (0.11)_2) × 2^5 = (0.10)_2 × 2^5 = (0.1)_2 × 2^5 です。これを (1.0)_2 の形に正規化すると、小数点を1つ右にずらすため指数は1減少し、(1.0)_2 × 2^4 となります。したがって b は 4(選択肢イ)です。
小問 設問2 c:イ
(1.0)_2 × 2^4 を単精度表現に変換します。正の数なので符号部は0です。指数部β=4に127を加えると131となり、2進数で (10000011)_2 です。仮数部は (1.0)_2 から整数部1を省略した小数部分なので全ビット0となります。これらに合致するビット列は選択肢イです。
小問 設問2 d:エ
A = (1.01)_2 × 2^5、B = (1.1)_2 × 2^4 です。乗算 A×B は仮数部同士を掛けると (1.01)_2 × (1.1)_2 = (1.01)_2 × 1 + (1.01)_2 × 0.1 = (1.01)_2 + (0.101)_2 = (1.111)_2 となり、指数は 2^(5+4) = 2^9 です。よって (1.111)_2 × 2^9 となり、d は 1.111(選択肢エ)です。

覚えるポイント

  • IEEE 754単精度では指数部に127を加えたバイアス表現を用い、仮数部は先頭の1を省略して格納する。

間違えやすいところ

  • 浮動小数点の足し引きで桁をそろえた後、形を整え直す(指数部の調整)のを忘れてしまうこと。

出題の前提:平成24年度春期基本情報技術者試験午後問1出題条件に基づく。

出典:IPA『2012年度 春期 午後』
公式問題冊子 p.5 ↗(www.ipa.go.jp) / 公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp)

2012年度 春期 午後

参照した公式資料

IPAが公開した2012年度 春期 午後の問題・解答資料です。