2024年4月22日月曜日

浮動小数点(IEEE754)

 IEEE754は、浮動小数点の最もポピュラーなもの。

32bit2進数による浮動小数点を例にみていく。

32bit2進数による浮動小数点

次のように「符号」「指数部」「仮数部」の形式で表現する。

符号部指数部仮数部
1bit8bit23bit
32bit

ここで用いる式は、とってもシンプルである。

(-1) ^ S × 1.M × 2 ^ ( E - 127 )

S…

符号部。
0か1で表現する。

E…

指数部。
指数部の- 127 は、マイナス値を表現するための工夫でバイアス値と呼ばれている。
例えば E 127 の部分が 2 であれば、 E の値は 129 であり、この 129 を 2 進数で表現したものを指数部の値として取り扱う。
要は必要な指数に 127 を足した ものを指数部にすればよい。

M…

仮数部。
仮数部のM は、 1 の位 が 常に 1 なので省略し、 小数点以下の数字のみをM として表す。

例)3.625 を 32bit 浮動小数点で表す

始めに、3と0.625に分けて考える。

3は、2進数に変換すると        11

0.625は、2進数に変換すると
    ×2    1.25    ← 整数部1は無視して0.25として2倍
    ×2    0.50 
    ×2    1.00    ← 小数部が0になったら計算終了。
整数部分を、上から読んで 0.101

よって、3.625は、エ進数に変換すると 11.101 となる。

この 11.101 を浮動小数点に変換する

(-1) ^ S × 1.M × 2 ^ ( E - 127 )

この式に、 11.101 を当てはめると

( -1 ) ^ 0 × 1.1101 × 2 ^ 1

となる。
これを分析すると

S…    0
E…    128(E - 127 = 1 を計算)
         10000000
M…    11010000000000000000000

SEMの順に並べると

0 10000000 11010000000000000000000

完成