固定小数点と浮動小数点の違い:表現・範囲と精度・演算器の規模・オーバーフロー・用途を比較
固定小数点は、小数点の位置をあらかじめ決めておき、整数と同じビット列と演算器で小数を扱う方式です。回路が小さく電力も少ないので、DSPや浮動小数点の演算器を持たないマイコン、AIの推論の整数演算で使われます。浮動小数点は、符号・指数部・仮数で数を表し、指数部で小数点の位置を動かすので、非常に広い範囲の値を、ほぼ一定の相対精度で扱えます。演算器は大きくなりますが、桁合わせを気にせずに使えるので、汎用の計算やAIの学習の標準になっています。
| 項目 | 固定小数点 | 浮動小数点 |
|---|---|---|
| 表現のしかた | 整数のビット列に、決めておいたスケール(2の−n乗)を掛けて読む。Q15などと表す | 符号・指数部・仮数の3つで、(−1)^符号 × 1.仮数 × 2^(指数 − バイアス)と表す。IEEE 754で規定 |
| 表せる範囲(例) | Q15(16ビット)では −1〜1 − 2⁻¹⁵ | 単精度(32ビット)ではおよそ10⁻³⁸〜10³⁸。非正規化数でさらに0の近くまで |
| 精度 | 刻みが一定(絶対誤差が一定)。小さい値ほど相対誤差が大きい | 相対精度がほぼ一定(単精度で約7桁)。値が大きいほど刻みも大きい |
| 演算器 | 整数の加算器と乗算器そのまま | 指数の比較、仮数の桁合わせ、正規化、丸めの回路が必要 |
| 回路の規模と電力 | 小さい。同じビット幅なら浮動小数点よりずっと少ない | 大きい。同じビット幅の整数の演算器より、面積もエネルギーも数倍以上になることが多い |
| オーバーフローの扱い | 2の補数では反対側の値に回り込む。飽和演算や、余裕のビット(ガードビット)を持つ累算器で防ぐ | 表せる最大値を超えると±無限大になる。0÷0などはNaN |
| スケーリング | プログラマが値の範囲を見積もり、各演算でのシフトや桁の位置を設計する | 指数部が自動で調整するので、ほとんど意識しなくてよい |
| 結果の再現性 | ビット単位で同じ結果になりやすい | 足し算の順序で結果がわずかに変わる(結合法則が成り立たない) |
| 使われる場所 | DSP、浮動小数点の演算器のない小さなマイコン、FPGAやASICの信号処理、AIの推論の整数演算(INT8など) | パソコンやサーバーの汎用計算、科学技術計算(倍精度)、グラフィックス、AIの学習(FP32・BF16・FP16・FP8) |
数値は代表的な目安で、世代や製品によって異なります。