【FE2問】最難関の捨て問!浮動小数点(基本情報技術者試験)
IT専門学校の先生として最悪なことを言っているかもですが、「浮動小数点の問題は捨て問にして構いません」と学生さんに伝えています。
なぜなら出ても1問。基本情報技術者試験の計算問題のラスボスだから。
基本情報技術者試験には、他にもたっくさんの計算問題が出ます。>計算問題まとめNote
浮動小数点1つに拘るよりも、他の問題を正解できるようになった方が得点がアップできます。(ゾーマ様1体よりも、他のモンスターをたくさん倒すようなものです)
とはいえ用語問題で出ることもあるので粘れはします。今回の解説で少しは正解できるようになれますし、こんな感じの計算か、と分かるように書きました。
>補数と浮動小数点は難しいですが、「満点を狙いたい」「分からないが気持ち悪い!」と学習意欲の高い方は読んでみてください。
「他の計算問題から切り崩そう」と考えなおした方は、>計算問題まとめNote に33個の無料Noteのリンクがあるので、解けそうな問題を見つけてくださいね。ベン図・論理回路がお薦め、ネットワークやデータベースもゆくゆくは正解できるようになってくださいね。
それでは始めましょう!
講座 | 浮動小数点の形
浮動小数点表記では、数値を指数の形で記述します。
分かりにくいので、まずは私たちに馴染み深い10進数で考えて、その後コンピュータが使っている2進数、実際のデータ形式を解説していきますね。
まずは10進数で考えてみる
例えば、15, 1.5, 0.15の浮動小数点表記は以下の通り。
$$
a = f \times r^e\\
15 = 1.5 \times 10^1\\
1.5 = 1.5 \times 10^0\\
0.15 = 1.5 \times 10^{-1}\\
$$
以上のように、指数を使って整数部を1桁に揃えています。
f:仮数
e:指数
r:基数(10進数なら10)
浮動小数点では、以上3つをメモすれば良いですね。
2進数で考えてみる
2進数の場合は以下のようになります。
$$
a = f \times r^e\\
10.1 = 1.01 \times 2^1\\
1.01 = 1.01 \times 2^0\\
0.101 = 1.01 \times 2^{-1}\\
$$
以上のように、指数を使って1.xxxに揃えています。
f:仮数:1.~の形
e:指数:
r:基数(2進数なら2)
よって「10.1」なら仮数「1.01」、指数「1」、基数「2」をコンピュータに保存すれば良い、となります。
コンピュータでのデータ形式
しかし以下のように勿体ない面があります。
仮数は「1.~」で確定。2進数では「2.~」や「3.~」はあり得ないので、「1.」を記録するのは勿体ない。
指数は「-1」など負数も保存するので、符号を記録するのは勿体ない。
基数は「2」で確定。2進数なので。
したがって実際のコンピュータでは、「仮数の小数部」「符号なしの指数」を記録しています。
仮数:「1.01」なら小数部の「01」のみ記録
指数:「-1」なら+127して128の2進数「10000000」を記録
仮数の符号:例えば正なら0、負なら1を記録
※指数や符号の記録法については規格よって変わります。
浮動小数点の計算サイト様 でいろんな値の浮動小数点を計算して、数の動作を見てくださいね。値がピコピコ変わって楽しいです。
もし「0」が厳密には0ではなく、浮動小数点の最小値である点まで理解できれば完璧です。
問題演習1 | 浮動小数点形式の基礎
正解して欲しい問題です。
正答はア。
rが基数、eが指数から確定していけば、仮数が分からなくても正解できます。
問題演習2 | 浮動小数点形式の計算
少し難しいですが、選択肢で実質3択になり、指数部が同じなので仮数部で迷っても正解できる問題です。
浮動小数点は難しいので、出題者もヒントや正解しやすい誘導をしていると分かります。
正答はウ。
このNoteの講座では、仮数「1.~」の小数部「~」のみを記録、指数は+127をした値と紹介しましたが、この問題では違う仕様が書かれているので考え直しが必要です。
まず、0.25を浮動小数点の f×r^eの形にします。勿論2進数。
10進数の0.25は、2進数では0.01です。
浮動小数点の形にすると、1.0 × 2^(-2)です。
ここで選択肢を見ると、
エは符号部が1なので負数になっているので誤り。
ア~エの仮数部が全て「10000000000」で同じ。
1.0 × 2^(-2)だと、仮数部が「00000000000」となっているので、仮数部(仮数の小数部)を「10000000000」に合わせるために、0.1 × 2^(-1)とします。
指数部について、問題文には「負数は2の補数で表現」とあったので、「-1」を2進数の補数にします。
1を4ビット2進数にして0001、補数にするために各桁ビット反転して1110、+1して1111。1111が-1を意味する補数です。
他にも「応用情報技術者試験 平成20年春問02」や「浮動小数点の説明サイト様」を興味があれば覗いてみてください。でも、難しいので気をつけてくださいね。
まとめ
お疲れ様でした。
用語問題は何とかなりそうですが、計算問題はちょっとキビシかったかもですね。でも出題側もヒントや誘導をしているのが分かったと思います。
講座と問題の浮動小数点のデータ形式が違ったように、色んな規格がありますし、資格問題用に簡略化しているようでした。
「仮数部(小数部)× 2^指数」が基本形で、符号や指数(補数を使うのか、127バイアスをするのか)などを問題文から読み取らねば、なかなか正解はできないラスボスでした。
応用情報技術者試験でも捨て問にして良いので、数学の得意な方・学習意欲の得意な方・技術者として絶対理解したい方だけ、地道に挑戦するのが良いかなと思います。
ひとまず合格を優先したい方、他にも苦手な計算問題がある方は、そちらから攻めましょう。
他にも計算問題のNoteはたくさん公開していますので、興味があったら覗いていってくださいね。
それでは!
\力試しは修了試験で!4回分の解説です/
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ