見出し画像

【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 | 浮動小数点形式の基礎


正解して欲しい問題です。

実数aを浮動小数点表記  f × r^eで記録する時、適切なものはどれか。なお「^」はベキを指す。

ア:fを仮数、eを指数、rを基数という
イ:fを基数、eを仮数、rを指数という
ウ:fを基数、eを指数、rを仮数という
エ:fを指数、eを基数、rを仮数という

基本情報技術者試験 平成16年春午前問03より改訂

正答はア。

rが基数、eが指数から確定していけば、仮数が分からなくても正解できます。



問題演習2 | 浮動小数点形式の計算


少し難しいですが、選択肢で実質3択になり、指数部が同じなので仮数部で迷っても正解できる問題です。

浮動小数点は難しいので、出題者もヒントや正解しやすい誘導をしていると分かります。

数値を浮動小数点形式で表すとき、10進数0.25を表したものはどれか。なおデータ構造は、仮数部の符号に1ビット(0:正、1:負)、指数部に4ビット(基数は2、負数は2の補数で表現)、仮数部に11ビット(2進数、絶対値、最上位が0とならない)とする。

ア:0 0001 10000000000
イ:0 1001 10000000000
ウ:0 1111 10000000000
エ:0 0001 10000000000

基本情報技術者試験 平成18年春午前問04より改訂

正答はウ。

この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就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ

この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ