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. 符号: 負なので符号ビット = 1
  2. 絶対値を2進数に変換: 6.75 = 110.11₂
  3. 正規化: 1.1011 x 2²(小数点の前に 1 が1つになるよう移動)
  4. 指数部: 2 + 127(バイアス)= 129 = 10000001₂
  5. 仮数部: 1011(先頭の 1 を省略し、23ビットにゼロで埋める): 10110000000000000000000
  6. 組み立て: 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 の表現を分析します。

Try It — Number Base Converter

フルツールを開く