
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
IEEE標準形式(単精度)の浮動小数点数(40A80000)16と(C0300000)16の積の16進数表記を求める問題。5.25×(−2.75)=−14.4375であり、(C1670000)16となる。
IEEE単精度形式を10進数に直して計算し、再び、この形式に戻す問題。
① 単精度: 符号1ビット・指数部(α+127)8ビット・仮数部23ビット。値=(−1)^S×1.M×2^(E−127)
② 40A80000: E=129、1.0101₂=1.3125 → 5.25。C0300000: S=1、E=128、1.011₂=1.375 → −2.75。積−14.4375=−1.1100111₂×2³ → 1 10000010 1100111… → C167…
③ C1670000(⑤)
(40A80000)16=0100 0000 1010 1000 0000…。S=0、E=1000 0001=129、M=010 1000…。1.M=1.0101(2)=1.3125、2^(129−127)=4なので、値は5.25。(C0300000)16=1100 0000 0011 0000 0000…。S=1、E=1000 0000=128、M=011 0000…。1.M=1.011(2)=1.375、2^(128−127)=2なので、値は−1.375×2=−2.75。積=5.25×(−2.75)=−14.4375。14.4375=1110.0111(2)=1.1100111(2)×2^3。S=1、E=3+127=130=1000 0010、M=1100 111 0…。全体は、1 10000010 1100111 0000…=1100 0001 0110 0111 0000…=(C1670000)16。したがって⑤が正しい。
■ 16進数と2進数
16進数の1桁は、2進数の4桁に対応します(0=0000、…、9=1001、A=1010、…、F=1111)。例えば40A8は0100 0000 1010 1000です。
■ IEEE形式の読み方
先頭1ビットが符号(0なら正、1なら負)、次の8ビットが指数部E、残り23ビットが仮数部Mで、値は(1.M)×2^(E−127)です。例えば(40A80000)₁₆は、符号0、E=10000001=129、M=0101…なので、1.0101(2進数)=1.3125に2²=4を掛けて5.25です。
■ 2進数の小数
小数点以下の位は、左から1/2, 1/4, 1/8, …を表します。1.0101なら1+1/4+1/16=1.3125です。
正×負なので積は負で、符号ビットは1です(先頭の16進数がCになる④⑤に絞れる)。積の大きさは5.25×2.75≒14.4で、8以上16未満なので指数は3、Eは3+127=130=10000010です。14.4÷8≒1.8なので、仮数部の先頭は1.1100…(1+1/2+1/4+…)で「110」から始まります。3文字目の16進数は、Eの最後のビット0と仮数部の先頭3ビット110を並べた0110=6なので、「C16」で始まる⑤です。
IEEE754単精度: 符号1ビット、指数8ビット(バイアス127)、仮数23ビット(先頭の1を省略)。積は、符号=符号のXOR、指数=和−127、仮数=1.Mどうしの積を正規化、で求まる。
キーワード: IEEE754、浮動小数点、単精度、16進数、符号部、指数部、仮数部、情報工学部門