ここでは 10 進数の実数を「浮動小数点数」形式の 2 進数に変換する方法について学びます。
浮動小数点数は固定小数点数と違って小数点の位置が固定されていないという形式です。
なお浮動小数点数を実現する方法はいくつかありますが、今回はもっともポピュラーな「IEEE754」を用いる方法について学びます。
さて IEEE754 では小数を次のようにして表しています。
符号部 + 指数部 + 仮数部
「符号部」は符号を表す部分です。
長さは 1 ビットで、0 のとき+、1 の時はマイナスを表します。
「指数部」は小数点の位置を表す部分です。
「仮数部」は有効数字を表す部分です。
なお IEEE 754 では代表的な形式の全体や各部の長さ(ビット数)は以下の表1の様に決められています。
表 1 : IEEE754 基本形式
形式 | 全体 | 符号部 | 指数部 | 仮数部 |
---|---|---|---|---|
半精度 | 16 ビット | 1 ビット | 5 ビット | 10 ビット |
単精度(float) | 32 ビット | 1 ビット | 8 ビット | 23 ビット |
倍精度(double) | 64 ビット | 1 ビット | 11 ビット | 52 ビット |
倍々精度/4倍精度 | 128 ビット | 1 ビット | 15 ビット | 112 ビット |
では 10 進数の実数を浮動小数点数形式に変換してみます。
A を 10 進数の実数とする
※ 補足
半精度の場合 → $2^{5-1}-1 = 15$ を E に足す
単精度の場合 → $2^{8-1}-1 = 127$ を E に足す
倍精度の場合 → $2^{11-1}-1 = 1023$ を E に足す
倍々精度の場合 → $2^{15-1}-1 = 16383$ を E に足す
逆にこの浮動小数点数形式で表された2進数を10進数に変換する方法は次の通りです
※ 補足
半精度の場合 → $2^{5-1}-1 = 15$ を E から引く
単精度の場合 → $2^{8-1}-1 = 127$ を E から引く
倍精度の場合 → $2^{11-1}-1 = 1023$ を E から引く
倍々精度の場合 → $2^{15-1}-1 = 16383$ を E から引く
では例として 10 進数 A = -12.625 を単精度浮動小数点数に変換してみます。
A = -12.625 とする。
逆に単精度浮動小数点数 0b11000001010010100000000000000000 を 10 進数の実数に変換してみます。
0b 1_10000010_10010100000000000000000 の
符号部 = 1
指数部 = 10000010
仮数部 = 10010100000000000000000
なので