IEEE 754 単精度の基本
IEEE 754単精度(float32)フォーマットの基本を学びます。符号1ビット、指数8ビット、仮数23ビットの32ビットレイアウトを理解しましょう。
Decimal Value
1.0
Float32 Hex
0x3F800000
Float64 Hex
0x3FF0000000000000
詳細な説明
IEEE 754単精度は、C/C++ではfloat、JavaではFloatと呼ばれる、浮動小数点数を表現する32ビットバイナリフォーマットです。すべての単精度値は、3つのフィールドに分けられた正確に32ビットを使用してエンコードされます。
3つのフィールド:
| フィールド | ビット数 | 位置 |
|---|---|---|
| 符号 | 1ビット | ビット31(最上位) |
| 指数 | 8ビット | ビット30-23 |
| 仮数 | 23ビット | ビット22-0(最下位) |
値1.0のエンコード方法:
- 符号ビット = 0(正の数)
- 指数 = 127(バイアス付き指数として格納、実際の指数 = 127 - 127 = 0)
- 仮数 = 000...0(暗黙の先頭1にゼロの小数部 = 1.0)
計算式: (-1)^符号 x (1 + 仮数) x 2^(指数 - 127)
1.0の場合: (-1)^0 x (1 + 0) x 2^(127 - 127) = 1 x 1 x 1 = 1.0
16進数では0x3F800000、バイナリでは: 0 01111111 00000000000000000000000。
精度と範囲:
単精度は約7桁の10進精度を提供します。最小の正規化された正の値は約1.18e-38、最大は約3.40e+38です。多くのグラフィックスやゲームアプリケーションでは、32ビット浮動小数点数が64ビットの倍精度の半分のメモリで十分な精度を提供します。
バイアスエンコーディング:
指数はバイアス127を使用します。つまり、格納される値は常に実際の指数に127を加えたものです。これにより、指数に別の符号ビットを必要とせず、2の正と負の累乗の両方を表現できます。正規化された数値の格納値は1から254の範囲です(0と255は特殊値用に予約されています)。
ユースケース
単精度の理解は、GPUプログラミング、組み込みシステム開発、およびメモリ効率の良い浮動小数点ストレージが必要なアプリケーションに不可欠です。グラフィックスシェーダー、機械学習推論、センサーデータ処理では一般的にfloat32が使用されます。