基本情報技術者 2012年 春期 午後 問01
浮動小数点数に関する次の記述を読んで、設問1,2に答えよ。
(1) の形で表記される浮動小数点数を、図1に示す32ビット単精度浮動小数点形式(以下、単精度表現という)で表現する。ここで、αとβは次の条件を満たすものとする。
α = 0、又は 1 ≦ |α| < 2
−126 ≦ β ≦ 127

① 符号部(ビット番号31)
αの値が正のとき0、負のとき1が入る。
② 指数部(ビット番号30〜23)
βの値に127を加えた値が2進数で入る。
③ 仮数部(ビット番号22〜0)
|α|の整数部分1を省略し、残りの小数部分が、ビット番号22に小数第1位が来るような2進数で入る。
ただし、αの値が0の場合、符号部、指数部、仮数部ともに0とする。
(2) 例えば、10進数の0.75を2進数で表すと、となる。これはと表記でき、単精度表現では、図2のとおり、符号部は、指数部は−1に127を加えてとなり、仮数部はの小数部分が入るので、となる。ここで、00…0は0が連続していることを表す。

設問1:
問題文を見る 次の単精度表現が表す数値として正しい答えを、解答群の中から選べ。

解答群
ア:3×
イ:3×
ウ:3×
エ:3×
オ:11×
カ:11×
キ:11×
ク:11×
模範解答
オ
解説
解答の導き方
この問題では、ビット列を「符号部」「指数部」「仮数部」に分け、それぞれから数値を読み取ります。
-
符号を確認します。
ビット31は「0」です。問題文では、符号部が0なら正の数を表します。したがって、答えは正の数です。 -
指数部から指数の値を求めます。
ビット30〜23は「00000101」です。これは2進数で、10進数の5です。
問題文には「βの値に127を加えた値が2進数で入る」とあります。つまり、指数部の値は実際の指数βに127を加えた値です。したがって、です。 -
仮数部から、1より小さい部分を読み取ります。
ビット22から順に「0、1、1」です。問題文では、仮数部には整数部分の1を省略して、小数部分を入れると説明されています。
2進数の小数第1位、第2位、第3位は、それぞれ 、、 の位です。そのため、仮数部は次の値になります。省略されている整数部分の1を戻すと、です。 -
の形に当てはめます。
、なので、となります。したがって、該当する選択肢はオです。
誤りやすいポイント
-
指数部の値を、そのまま実際の指数だと思うこと
指数部に入るのは、実際の指数に127を加えた値です。この問題では、指数部の値5から127を引いて、実際の指数を求めます。 -
仮数部を小数部分だけで読むこと
仮数部には整数部分の1が省略されています。仮数部が でも、 は ではなく、 です。 -
2進数の小数の位を取り違えること
小数点の右側は、左から順に 、、 の位です。この問題では、最初の桁が0なので、値は です。
FAQ
Q:指数部の5は、なぜ実際の指数ではないのですか?
A:単精度表現では、指数部に実際の指数βではなく、βに127を加えた値を入れる決まりだからです。このため、実際の指数を求めるときは127を引きます。
A:単精度表現では、指数部に実際の指数βではなく、βに127を加えた値を入れる決まりだからです。このため、実際の指数を求めるときは127を引きます。
Q:仮数部の先頭にある1は、なぜビット列に書かれていないのですか?
A:問題文の形式では、 の整数部分の1を省略する決まりだからです。仮数部から読み取った小数部分に、整数部分の1を加えてを求めます。
A:問題文の形式では、 の整数部分の1を省略する決まりだからです。仮数部から読み取った小数部分に、整数部分の1を加えてを求めます。
Q:最後に指数がになるのはなぜですか?
A:なので、元の指数にを足します。したがって、です。
A:なので、元の指数にを足します。したがって、です。
関連キーワード: 浮動小数点数、単精度浮動小数点形式、符号部、指数部、仮数部
設問2:
問題文を見る 次の記述中のに入れる正しい答えを、解答群の中から選べ。
二つの浮動小数点数AとBの減算と乗算を行う。

(1) 減算A − Bを、次の手順①〜③で行う。
① 指数部の値を大きい方に合わせる。Aがであることから、Bを(a)とする。
② 減算を行う。
((1.01) − (a)) × = (1.0) × 2のb乗
③ ②の結果を単精度表現する。その結果はcとなる。
(2) 乗算A × Bの結果は(d) × となる。
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から、それぞれの指数と仮数を読み取ります。
- Aの指数部は です。これは なので、指数の値は です。仮数部の先頭のビットは なので、先頭の省略された を補うと、Aは です。
- Bの指数部は です。これは なので、指数の値は です。仮数部の先頭のビットは なので、先頭の省略された と合わせると、Bは です。
(1) 減算
① 指数をそろえます。
問題文には「指数部の値を大きい方に合わせる」とあります。Aの指数は 、Bの指数は なので、Bを指数 の形に直します。指数を 増やすと、同じ値を保つために仮数は半分になります。
したがって、aには が入り、解答群では ウ です。
② 仮数を引き算します。
これは、十進数では と同じ計算です。よって、指数も含めた結果は次のとおりです。
最後の等式では、仮数を から にするため、指数を から に下げています。したがって、bは で、解答群では イ です。
③ 結果を単精度表現にします。
結果は正の数なので、符号部は です。指数は なので、指数部には を入れます。 は です。仮数は で、先頭の は記録しないため、仮数部はすべて になります。
つまり、符号部が 、指数部が 、仮数部がすべて の行を選びます。図の選択肢では cはイ です。
(2) 乗算
、 なので、仮数どうしを掛け、指数どうしを足します。
たとえば、、 なので、積は です。また、指数は です。
したがって、乗算の結果は となり、dは エ です。
誤りやすいポイント
- 指数部に入っている値は、そのままの指数ではありません。問題文のとおり、指数に を加えた値が格納されています。元の指数を求めるときは、格納値から を引きます。
- 指数をそろえるとき、指数を大きくするなら仮数は小さくします。Bの指数を から にするので、仮数は から になります。
- 仮数部には、先頭の を記録しません。結果が の場合、仮数部には小数部分の だけが並びます。
- 減算の答え は、単精度表現で使う形に整える必要があります。 と表すため、bは ではなく です。
- 乗算では、仮数を掛け、指数を足します。指数を掛けたり、仮数どうしを足したりしないように注意します。
FAQ
Q: 指数部の値に を加えるのはなぜですか?
A: 指数部を、負の数を含む指数もビットで表せる形にするためです。この問題では、実際の指数を求めるときに、格納値から を引きます。
A: 指数部を、負の数を含む指数もビットで表せる形にするためです。この問題では、実際の指数を求めるときに、格納値から を引きます。
Q: 仮数部に先頭の を記録しないのはなぜですか?
A: でない数は、仮数の整数部分が になる形で表すためです。先頭が必ず になるので、そのビットを省略し、残りの小数部分を記録します。
A: でない数は、仮数の整数部分が になる形で表すためです。先頭が必ず になるので、そのビットを省略し、残りの小数部分を記録します。
Q: 減算のあとに仮数を整えるのはなぜですか?
A: 単精度表現では、 でない数の仮数を 以上 未満の形にするためです。 のままではこの条件に合わないので、 に直し、その分だけ指数を調整します。
A: 単精度表現では、 でない数の仮数を 以上 未満の形にするためです。 のままではこの条件に合わないので、 に直し、その分だけ指数を調整します。
関連キーワード: 浮動小数点数、単精度浮動小数点形式、指数部、仮数部、指数バイアス、2進数



