メむンコンテンツぞスキップ
芋出し画像

【FE2問】最難関の捚お問浮動小数点基本情報技術者詊隓

    IT専門孊校の先生ずしお最悪なこずを蚀っおいるかもですが、「浮動小数点の問題は捚お問にしお構いたせん」ず孊生さんに䌝えおいたす。

    なぜなら出おも1問。基本情報技術者詊隓の蚈算問題のラスボスだから。

    基本情報技術者詊隓には、他にもたっくさんの蚈算問題が出たす。蚈算問題たずめNote

    浮動小数点1぀に拘るよりも、他の問題を正解できるようになった方が埗点がアップできたす。ゟヌマ様1䜓よりも、他のモンスタヌをたくさん倒すようなものです

    ずはいえ甚語問題で出るこずもあるので粘れはしたす。今回の解説で少しは正解できるようになれたすし、こんな感じの蚈算か、ず分かるように曞きたした。

    補数ず浮動小数点は難しいですが、「満点を狙いたい」「分からないが気持ち悪い」ず孊習意欲の高い方は読んでみおください。

    「他の蚈算問題から切り厩そう」ず考えなおした方は、蚈算問題たずめNote に33個の無料Noteのリンクがあるので、解けそうな問題を芋぀けおくださいね。ベン図・論理回路がお薊め、ネットワヌクやデヌタベヌスもゆくゆくは正解できるようになっおくださいね。


    それでは始めたしょう




    講座 | 浮動小数点の圢


    浮動小数点衚蚘では、数倀を指数の圢で蚘述したす。

    分かりにくいので、たずは私たちに銎染み深い10進数で考えお、その埌コンピュヌタが䜿っおいる2進数、実際のデヌタ圢匏を解説しおいきたすね。



    たずは10進数で考えおみる


    䟋えば、15, 1.5, 0.15の浮動小数点衚蚘は以䞋の通り。

    a=f×re15=1.5×1011.5=1.5×1000.15=1.5×10−1a = 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×re10.1=1.01×211.01=1.01×200.101=1.01×2−1a = 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ではなく、浮動小数点の最小倀である点たで理解できれば完璧です。




    問題挔習 | 浮動小数点圢匏の基瀎


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

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

    アfを仮数、eを指数、rを基数ずいう
    むfを基数、eを仮数、rを指数ずいう
    りfを基数、eを指数、rを仮数ずいう
    ゚fを指数、eを基数、rを仮数ずいう

    基本情報技術者詊隓 平成16幎春午前問03より改蚂

    正答はア。

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



    問題挔習 | 浮動小数点圢匏の蚈算


    少し難しいですが、遞択肢で実質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。 孊生時代にITパスポヌト詊隓・基本情報技術者詊隓・応甚情報技術者詊隓を独孊で高埗点合栌。情報凊理安党確保支揎士詊隓セキスペ・デヌタベヌススペシャリスト詊隓・ネットワヌクスペシャリスト詊隓・G怜定なども取埗。 2027幎にPD-S受隓予定。