IEEE 754 単精度の基本

IEEE 754単精度(float32)フォーマットの基本を学びます。符号1ビット、指数8ビット、仮数23ビットの32ビットレイアウトを理解しましょう。

Fundamentals

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のエンコード方法:

  1. 符号ビット = 0(正の数)
  2. 指数 = 127(バイアス付き指数として格納、実際の指数 = 127 - 127 = 0)
  3. 仮数 = 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が使用されます。

試してみる — IEEE 754 Inspector

フルツールを開く