HOME»基本情報技術者平成24年春期問題»午後問1
基本情報技術者過去問題 平成24年春期 午後問1
⇄問題文と設問を画面2分割で開く⇱問題PDF問1 ハードウェア
浮動小数点数に関する次の記述を読んで,設問1,2に答えよ。
- α×2βの形で表記される浮動小数点数を,図1に示す32ビット単精度浮動小数点形式(以下,単精度表現という)で表現する。ここで,αとβは次の条件を満たすものとする。
α=0,又は1≦lαl<2
-126≦β≦127- 符号部(ビット番号31)
αの値が正のとき0,負のとき1が入る。 - 指数部(ビット番号30~23)
βの値に127を加えた値が2進数で入る。 - 仮数部(ビット番号22~0)
lαlの整数部分1を省略し,残りの小数部分が,ビット番号22に小数第1位が来るような2進数で入る。
- 符号部(ビット番号31)
- 例えば,10進数の0.75を2進数で表すと,(0.11)2となる。これは(1.1)2×2-1と表記でき,単精度表現では,図2のとおり,符号部は(0)2,指数部は-1に127を加えて(01111110)2となり,仮数部は(1.1)2の小数部分が入るので,(100…0)2となる。ここで,00…0は0が連続していることを表す。
設問1
次の単精度表現が表す数値として正しい答えを,解答群の中から選べ。
解答群
- 3×2-125
- 3×2-122
- 3×25
- 3×2132
- 11×2-125
- 11×2-122
- 11×25
- 11×2132
解答選択欄
解答
- オ
解説
[符号部]
ビットは0なので正の値です。
[指数部]
ビット列は 00000101 は10進数表記では 5 になります。指数部の値はβに127を加えたものなので、
β=5-127=-122
[仮数部]
ビット列が 01100…00 は、|α|の整数部分である1が省略された小数部分だけの値なので、
α=1+(0.011)2=(1.011)2
よって設問の単精度表現は、(1.011)2×2-122 を示します。
選択肢では仮数部が3または11の整数で表現しているため、(1.011)2×2-122を仮数部が整数になるように変換すると、
(1.011)2×2-122=(1011)2×2-125
となります。2進数 1011 は10進数では11を指すため、仮数部を10進表記にした「11×2-125」が正解です。
∴オ:11×2-125
ビットは0なので正の値です。
[指数部]
ビット列は 00000101 は10進数表記では 5 になります。指数部の値はβに127を加えたものなので、
β=5-127=-122
[仮数部]
ビット列が 01100…00 は、|α|の整数部分である1が省略された小数部分だけの値なので、
α=1+(0.011)2=(1.011)2
よって設問の単精度表現は、(1.011)2×2-122 を示します。
選択肢では仮数部が3または11の整数で表現しているため、(1.011)2×2-122を仮数部が整数になるように変換すると、
(1.011)2×2-122=(1011)2×2-125
となります。2進数 1011 は10進数では11を指すため、仮数部を10進表記にした「11×2-125」が正解です。
∴オ:11×2-125
設問2
次の記述中の に入れる正しい答えを,解答群の中から選べ。
二つの浮動小数点数AとBの減算と乗算を行う。
二つの浮動小数点数AとBの減算と乗算を行う。
- 減算 A-B を,次の手順①~③で行う。
- 指数部の値を大きい方に合わせる。Aが(1.01)2×25であることから,Bを(a)2×25とする。
- 減算を行う。
((1.01)2-(a)2)×25=(1.0)2×2b - ②の結果を単精度表現する。その結果はcとなる。
- 乗算 A×B の結果は(d)2×29となる。
a に関する解答群
- 0.011
- 0.101
- 0.11
- 1.01
- 1.1
b に関する解答群
- 3
- 4
- 5
- 6
- 131
- 132
c に関する解答群
d に関する解答群
- 1.0
- 1.11
- 1.1101
- 1.111
- 1.1111
解答選択欄
- a:
- b:
- c:
- d:
解答
- a=ウ
- b=イ
- c=イ
- d=エ
解説
〔aについて〕
まずBが表す値を考えます。
[符号部]
符号ビットは0なので正の値です。
[指数部]
ビット列は 10000011 は10進数表記では 131 になります。指数部の値はβに127を加えたものなので、
β=131-127=4
[仮数部]
ビット列が 100…00 は、|α|の整数部分である1が省略された小数部分だけの値なので、
α=1+(0.1)2=(1.1)2
よってBは、(1.1)2×24 を示します。
①の手順では指数部の値を大きい方に合わせます。Aの指数部が 5 なので、Bを指数部が 5 になるように変換します。
(1.1)2×24=(0.11)2×25
∴a=ウ:0.11
〔bについて〕
A-Bは以下の手順で演算を行います。
(1.01)2×25-(0.11)2×25
=((1.01)2-(0.11)2)×25
=(0.1)2×25さらにbが指数部となっている値の仮数部は(1.0)2になっているため、(0.1)2×25の仮数部が(1.0)2になるように変換します。
(0.1)2×25=(1.0)2×24
∴b=イ:4
〔cについて〕
②の結果は上記で計算した「(1.0)2×24」です。
[符号部]
正の値なので符号ビットは0になります。
[指数部]
βの値4に127を加えた131を2進数表記にした 10000011 が入ります。
[仮数部]
仮数部には |α|の値 (1.0)2 の小数部分が格納されます。小数部分は 0 なので、仮数部のビット列は 00…00になります。
上記3つのビット列をつなぎ合わせると「イ」の単精度表現になります。∴c=イ
〔dについて〕
2進数同士の乗算は10進数の乗算を筆算で行うのと同じ要領で行うことができます。
(1.01)2×25×(1.1)2×24
=((1.01)2×(1.1)2)×29
=(1.111)2×29また"(1.01)2×(1.1)2"の部分は、一旦10進数に変換してから乗算を行い、再び2進数に戻す方法でも計算可能です。
(1.01)2×(1.1)2
=1.25×1.5=1.875
=1+0.5+0.25+0.125
=1+2-1+2-2+2-3
=(1.111)2
∴d=エ:1.111
まずBが表す値を考えます。
[符号部]
符号ビットは0なので正の値です。
[指数部]
ビット列は 10000011 は10進数表記では 131 になります。指数部の値はβに127を加えたものなので、
β=131-127=4
[仮数部]
ビット列が 100…00 は、|α|の整数部分である1が省略された小数部分だけの値なので、
α=1+(0.1)2=(1.1)2
よってBは、(1.1)2×24 を示します。
①の手順では指数部の値を大きい方に合わせます。Aの指数部が 5 なので、Bを指数部が 5 になるように変換します。
(1.1)2×24=(0.11)2×25
∴a=ウ:0.11
〔bについて〕
A-Bは以下の手順で演算を行います。
(1.01)2×25-(0.11)2×25
=((1.01)2-(0.11)2)×25
=(0.1)2×25さらにbが指数部となっている値の仮数部は(1.0)2になっているため、(0.1)2×25の仮数部が(1.0)2になるように変換します。
(0.1)2×25=(1.0)2×24
∴b=イ:4
〔cについて〕
②の結果は上記で計算した「(1.0)2×24」です。
[符号部]
正の値なので符号ビットは0になります。
[指数部]
βの値4に127を加えた131を2進数表記にした 10000011 が入ります。
[仮数部]
仮数部には |α|の値 (1.0)2 の小数部分が格納されます。小数部分は 0 なので、仮数部のビット列は 00…00になります。
上記3つのビット列をつなぎ合わせると「イ」の単精度表現になります。∴c=イ
〔dについて〕
2進数同士の乗算は10進数の乗算を筆算で行うのと同じ要領で行うことができます。
(1.01)2×25×(1.1)2×24
=((1.01)2×(1.1)2)×29
=(1.111)2×29また"(1.01)2×(1.1)2"の部分は、一旦10進数に変換してから乗算を行い、再び2進数に戻す方法でも計算可能です。
(1.01)2×(1.1)2
=1.25×1.5=1.875
=1+0.5+0.25+0.125
=1+2-1+2-2+2-3
=(1.111)2
∴d=エ:1.111