基本情報技術者 2015年 秋期 午後 問02
浮動小数点数に関する次の記述を読んで、設問1~4に答えよ。
α = 0、又は1≦|α|<2を満たすα、及び−126≦β≦127を満たすβを用いてα×の形で表記される浮動小数点数を、図1に示す32ビット単精度浮動小数点形式の表現(以下、単精度表現という)で近似する。

(1) 符号部(ビット番号31)
αの値が正のとき0、負のとき1が入る。
(2) 指数部(ビット番号30〜23)
βの値に127を加えた値が2進数で入る。
(3) 仮数部(ビット番号22〜0)
|α|の整数部分1を省略し、残りの小数部分が、ビット番号22に小数第1位が来るような2進数で入る。このとき、仮数部に格納できない部分については切り捨てる。
(4) αの値が0の場合、符号部、指数部、仮数部ともに0とする。
なお、値の記述として、単にαと記述した場合は、αは10進数表記であり、と記述した場合はαがn進数表記であることを示す。例えば、は0.625と同じ値を表す。また、00…0という表記は、0が連続していることを表す。
設問1:
問題文を見る 0.625を単精度表現したときに指数部に入る値として正しい答えを、解答群の中から選べ。
解答群
ア:
イ:
ウ:
エ:
オ:
模範解答
イ
解説
解答の導き方
問われているのは、を単精度表現にしたときの指数部です。単精度表現は、数を符号部・指数部・仮数部に分けて表す形式です。
まず、を2進数で表すと、問題文の例にあるとおり、です。ただし、浮動小数点数は「を満たす」を使って表します。そこで、小数点の位置を調整して、次の形にします。
は10進数でです。そのため、となり、条件に合うは、はです。
次に、本文の「の値に127を加えた値が2進数で入る」という規則を使います。
指数部は8ビットなので、を8ビットの2進数にするとです。これを4ビットずつ区切って16進数に直すと、になります。したがって、解答群ではイを選びます。
誤りやすいポイント
- 指数部に入れるのは、そのものではありません。に127を加えた値です。
- をそのままにしてはいけません。本文では、の絶対値が以上未満となる形で表します。
- を求めた後、指数部の値を16進数で答える点にも注意してください。はです。
FAQ
Q: なぜ指数部にではなくを入れるのですか?
A: 指数部には、実際の指数ではなく、の値を格納する規則だからです。今回はとなります。
A: 指数部には、実際の指数ではなく、の値を格納する規則だからです。今回はとなります。
Q: をそのまま使えないのですか?
A: そのままでは、の絶対値が以上未満という条件を満たしません。と表し直すことで、条件に合う形になります。
A: そのままでは、の絶対値が以上未満という条件を満たしません。と表し直すことで、条件に合う形になります。
Q: 符号部や仮数部も計算する必要がありますか?
A: この設問で問われているのは指数部だけです。指数部を求めるには、まず数をの形に直し、を計算します。
A: この設問で問われているのは指数部だけです。指数部を求めるには、まず数をの形に直し、を計算します。
関連キーワード: 浮動小数点数、2進数、正規化、指数部、バイアス表現
設問2:
問題文を見る 次の単精度表現された数値として正しい答えを、解答群の中から選べ。


解答群
ア:0.125
イ:0.25
ウ:0.375
エ:0.5
オ:0.75
カ:1.5
模範解答
オ
解説
解答の導き方
図のビット列から、符号部、指数部、仮数部を順に読み取ります。符号部は正負、指数部は の何乗を掛けるか、仮数部は数の大きさの部分を表します。
-
符号部を確認します。
ビット31は です。問題文には「αの値が正のとき0」とあるため、表す数は正です。 -
指数部から を求めます。
ビット30〜23を並べると、 です。これは10進数で です。
問題文では、指数部に「βの値に127を加えた値」が入ると説明されています。したがって、となり、 です。 -
仮数部から を求めます。
仮数部はビット22から始まります。図ではビット22が で、それ以降のビットは です。
問題文には、仮数部では の整数部分の を省略するとあります。したがって、仮数部に格納された の前に省略された を補うと、 です。は、です。符号部が で正なので、 となります。 -
を計算します。
したがって、選択肢では 0.75 です。
誤りやすいポイント
- 指数部の値 を、そのまま と考えないようにします。指数部には が格納されているため、 を引いて を求めます。
- 仮数部の だけを数の大きさと考えないようにします。省略されている整数部分の を補うので、 は です。
- だけで答えを決めず、指数 も反映します。実際の値は を で割った です。
FAQ
Q: 指数部が なのに、なぜ指数が なのですか?
A: 指数部には、実際の指数 に を加えた値が入るためです。 と求めます。
A: 指数部には、実際の指数 に を加えた値が入るためです。 と求めます。
Q: 仮数部の先頭の は、どこから来るのですか?
A: 問題文で、 の整数部分の は省略して格納すると定められているためです。ビット22以降に格納された部分の前に を補います。
A: 問題文で、 の整数部分の は省略して格納すると定められているためです。ビット22以降に格納された部分の前に を補います。
Q: 符号部が でも、答えが とは限らないのですか?
A: 符号部は数の正負を表します。 は正を表し、数そのものが という意味ではありません。
A: 符号部は数の正負を表します。 は正を表し、数そのものが という意味ではありません。
関連キーワード: 浮動小数点数、単精度浮動小数点形式、符号部、指数部、仮数部、指数バイアス
設問3:
問題文を見る 次の記述中のに入れる正しい答えを、解答群の中から選べ。
二つの浮動小数点数AとBの加算を行う。


AとBの加算を、次の①、②の手順で行う。
① 指数部の値を大きい方に合わせる。Aがであることから、Bをとする。
② 加算を行う。
aに関する解答群
ア:0.001
イ:0.01
ウ:0.011
エ:0.1
オ:0.11
カ:1.1
bに関する解答群
ア:3
イ:4
ウ:5
エ:6
オ:130
カ:131
キ:132
模範解答
a:オ、b:イ
解説
解答の導き方
この問題では、AとBの指数をそろえてから加算し、結果を指定された形で表します。指数は、数を何倍するかを表す部分です。仮数は、指数を除いた数の部分です。
まず、Aは問題文に「」とあります。したがって、Aの指数はです。
次に、Bの単精度表現を読み取ります。符号部がなので、Bは負の数です。指数部はで、10進数ではです。問題文には「βの値に127を加えた値が2進数で入る」とあるため、実際の指数はです。また、仮数部の先頭はなので、仮数はです。よって、Bはです。
①では、指数を大きい方のにそろえます。指数をからへ増やすと、数の値を変えないために仮数を半分にします。2進数では小数点を左へ1桁動かすことにあたります。
したがって、空欄にはが入ります。選択肢はオです。
②では、指数がそろったので仮数を加算します。小数点の位置をそろえて計算すると、次のとおりです。
ここで、は指定された形のに直すと、です。したがって、
となり、空欄にはが入ります。選択肢はイです。
誤りやすいポイント
- 指数部には実際の指数そのものではなく、実際の指数にを加えた値が入ります。Bの実際の指数は、指数部の値からを引いて求めます。
- 指数をそろえるときは、仮数の位置も調整します。指数を増やした場合、仮数は半分になります。
- Bは負の数です。空欄には仮数の大きさを入れ、負の符号は式にある「」で表します。
- 加算後のを、そのままの形に当てはめないようにします。に直すときは指数も小さくなります。
FAQ
Q: 指数を増やしたのに、仮数を半分にするのはなぜですか?
A: 指数を増やすと、のべき乗は倍になります。数全体の値を変えないためには、仮数を半分にする必要があります。
A: 指数を増やすと、のべき乗は倍になります。数全体の値を変えないためには、仮数を半分にする必要があります。
Q: 空欄に負の値を入れないのはなぜですか?
A: 式に「」とあり、負の符号はすでに式に含まれているためです。空欄には仮数の大きさだけを入れます。
A: 式に「」とあり、負の符号はすでに式に含まれているためです。空欄には仮数の大きさだけを入れます。
Q: 加算後の指数がではなくになるのはなぜですか?
A: 加算した結果の仮数がになり、これをの形に直すと仮数が倍になります。その分、指数を小さくして、数全体の値を保ちます。
A: 加算した結果の仮数がになり、これをの形に直すと仮数が倍になります。その分、指数を小さくして、数全体の値を保ちます。
関連キーワード: 浮動小数点数、単精度浮動小数点形式、指数バイアス、仮数部、2進数の桁合わせ
設問4:
問題文を見る 次の記述中のに入れる正しい答えを、解答群の中から選べ。
設問3のAについてA × 10の値は、次の①〜③の手順で求めることができる。
① A × 8の値を求める。
A × 8 =
② A × 2の値を同様に求める。
③ ①と②の結果を加算する。
加算結果を単精度表現すると、cになる。
cに関する解答群


模範解答
c:ウ
解説
解答の導き方
求めるのは、設問3の に対する の値を単精度表現にしたものです。問題文では、 を求めた後、 を求めて足す手順が示されています。
まず、問題文の式から と分かります。ここで は10進数の なので、 は次のように計算できます。
次に、 だけでなく、 でもあることから、
です。これらを足すと、
となります。2進数で足すと、次のとおりです。
この結果を、先頭が になる形で表すと、
です。したがって、符号部は正の数なので 、指数に当たる は です。問題文の「 の値に127を加えた値」が指数部に入るという規則から、指数部は
となります。
仮数部には、問題文の規則どおり、先頭の整数部分 を入れず、その後の小数部分を入れます。 の小数部分は で、その後はすべて です。
よって、符号部・指数部・仮数部を並べると、ビット位置31から順に
となります。この並びに当たる選択肢はウです。
誤りやすいポイント
- の「10」を、指数の10と取り違えないようにします。ここでは と分けて、 と の結果を足します。
- 指数部には の値をそのまま入れるのではありません。問題文の規則に従い、 を2進数にして入れます。
- 仮数部には、 の先頭の を入れません。小数部分の から始めます。
- 2進数の足し算では、桁をそろえてから加算します。 と を10進数のまま足すだけでなく、最終的に得た値を2進数で表すところまで確認します。
FAQ
Q: 指数部に127を加えるのはなぜですか?
A: 指数部を、負の値を含めて一定の規則で記録するためです。この問題では、指数 に127を加えた値を指数部に入れると定めています。
A: 指数部を、負の値を含めて一定の規則で記録するためです。この問題では、指数 に127を加えた値を指数部に入れると定めています。
Q: 仮数部の先頭の を省略しても、値を復元できますか?
A: この問題の浮動小数点数は、 以外では の絶対値が 以上 未満になる形で表します。そのため、先頭の整数部分は必ず であり、省略しても分かるようになっています。
A: この問題の浮動小数点数は、 以外では の絶対値が 以上 未満になる形で表します。そのため、先頭の整数部分は必ず であり、省略しても分かるようになっています。
Q: 仮数部に格納できない部分がある場合はどうしますか?
A: 問題文では切り捨てると定めています。今回の仮数は小数部分が の後すべて なので、切り捨てる必要はありません。
A: 問題文では切り捨てると定めています。今回の仮数は小数部分が の後すべて なので、切り捨てる必要はありません。
関連キーワード: 浮動小数点数、単精度浮動小数点形式、符号部、指数部、仮数部、2進数



