IEEE 754 浮動小数点数の2進数表現
IEEE 754 浮動小数点形式を理解: 符号ビット、指数部、仮数部。3.14 のような小数が 32 ビットおよび 64 ビットの2進数形式でどう格納されるか学べます。
Decimal (Floating Point) → Binary (IEEE 754)Hardware
詳細な説明
IEEE 754 は浮動小数点数を2進数で表現するための世界標準です。すべての最新 CPU、GPU、プログラミング言語がこの形式を使っています。これを理解すれば、JavaScript や他の言語で 0.1 + 0.2 !== 0.3 となる理由が分かります。
IEEE 754 の3つの構成要素:
32ビット(単精度)浮動小数点数は以下で構成されます:
- 1ビットの符号: 0 = 正、1 = 負
- 8ビットの指数部: 127 でバイアス(格納値 = 実際の指数 + 127)
- 23ビットの仮数部: 小数部分(暗黙の先頭 1 を含む)
ステップごとの例 --- -6.75 を IEEE 754 単精度に変換:
- 符号: 負なので符号ビット =
1 - 絶対値を2進数に変換: 6.75 = 110.11₂
- 正規化: 1.1011 x 2²(小数点の前に 1 が1つになるよう移動)
- 指数部: 2 + 127(バイアス)= 129 =
10000001₂ - 仮数部:
1011(先頭の 1 を省略し、23ビットにゼロで埋める):10110000000000000000000 - 組み立て:
1 10000001 10110000000000000000000
16進数では: 0xC0D80000。
浮動小数点に精度の問題がある理由:
10進数で 1/3 を正確に表現できない(0.333...)のと同様に、0.1 のような多くの10進数の小数は2進数で正確に表現できません。10進数の 0.1 を2進数にすると 0.0001100110011...(循環小数)となり、23ビットの仮数部に収めるために切り捨てられます。この切り捨てが有名な浮動小数点の丸め誤差を引き起こします。
IEEE 754 の特殊な値:
- ゼロ: 指数部と仮数部がすべてゼロ(正のゼロと負のゼロが存在)
- 無限大: 指数部がすべて1、仮数部がすべてゼロ
- NaN: 指数部がすべて1、仮数部がゼロ以外
- 非正規化数: 指数部がすべてゼロ、仮数部がゼロ以外(ゼロに非常に近い数)
IEEE 754 を理解することは、科学計算、グラフィックスプログラミング、および数値精度が重要なあらゆるアプリケーションに不可欠です。
ユースケース
ゲーム開発者やグラフィックスプログラマーは、物理シミュレーションにおける精度損失を理解し、GPU シェーダーでの浮動小数点演算を最適化するために IEEE 754 の表現を分析します。