IEEE 浮動小数点数の形式

Light C では小数を IEEE (Institute of Electrical and Electronic Engineers) の浮動小数点数形式で表します。この形式は世界で広く使用されている標準です。

IEEE 浮動小数点数は、符号部、指数部、仮数部の 3 つの部分から構成されます。符号部は数値の正負を表し、2<指数>×<仮数> が数値の絶対値を表します。

例外として、浮動小数点数の値が 0.0 の場合は、符号部、指数部、仮数部のすべてのビットが 0 になります。また、IEEE の仕様では正負の無限大や非数 (NaN) を表す形式も定義されていますが、Light C はこれらを使用しないため、説明も省略します。

主な IEEE 浮動小数点数として、4 バイト、8 バイト、10 バイトの形式を示します。C 言語の float は 4 バイト、double は 8 バイトの形式になります。また、Light C の浮動小数点数演算ライブラリの内部では、10 バイト形式を使って演算が行われます。

4 バイト 8 バイト 10 バイト
総計ビット数 32 64 80
符号ビット数 1 (31) 1 (63) 1 (79)
指数ビット数 8 (30〜23) 11 (62〜52) 15 (78〜64)
仮数ビット数 23 (22〜0) 52 (51〜0) 64 (63〜0)
バイアス 0x7F 0x3FF 0x3FFF

※( ) 内の数値はビット範囲

絶対値の計算方法を示します。

種類 絶対値
4 バイト形式 (2<指数部> - 0x7F) × (1 + <仮数部> / 0x80,0000)
8 バイト形式 (2<指数部> - 0x3FF) × (1 + <仮数部> / 0x10,0000,0000,0000)
10 バイト形式 (2<指数部> - 0x3FFF) × (<仮数部> / 0x8000,0000,0000,0000)

Light C でのいくつかの例を示します。

数値 4 バイト形式 8 バイト形式
0.0 0x00000000 0x0000000000000000
1.0 0x3F800000 0x3FF0000000000000
-1.0 0xBF800000 0xBFF0000000000000
2.0 0x40000000 0x4000000000000000
3.14 0x4048F5C3 0x40091EB851EB851F
10 0x41200000 0x4024000000000000
100 0x42C80000 0x4059000000000000
1000 0x447A0000 0x408F400000000000