Float32とFloat64の違い|精度・範囲・使い分けを比較
この記事の要点
- Float32は32ビット・約7桁、Float64は64ビット・約15〜16桁の10進有効桁を持ちます。
- Float64は精度と範囲に優れますが、必要なメモリ量はFloat32の2倍です。
- 用途、必要精度、データ量、利用するハードウェアに合わせて選びます。
Float32とFloat64の基本比較
| 項目 | Float32 | Float64 |
|---|---|---|
| 別名 | 単精度 | 倍精度 |
| 合計ビット数 | 32 bit | 64 bit |
| 符号・指数・仮数 | 1・8・23 bit | 1・11・52 bit |
| bias | 127 | 1023 |
| 10進有効桁 | 約7桁 | 約15〜16桁 |
| 保存容量 | 4 bytes | 8 bytes |
| 最大有限値の目安 | 約3.4×10³⁸ | 約1.8×10³⁰⁸ |
ビット構造の違い
符号1
指数8
仮数23
符号1
指数11
仮数52
Float64は指数部が広いため表現範囲が大きく、仮数部も広いため細かな差を保持できます。
精度の違いが結果へ与える影響
Float32は約7桁を超える10進数字を保持すると、末尾が丸められる可能性があります。Float64でも無限の精度があるわけではありませんが、一般的な計算ではFloat32より誤差を抑えられます。
金額や識別番号には注意
小数を必ず10進法どおり正確に扱う必要がある場合や、桁を失ってはいけない整数IDには、浮動小数点数以外の型を検討してください。
主な言語・環境での扱い
| 環境 | Float32相当 | Float64相当 |
|---|---|---|
| C / C++ | float | double |
| Java | float | double |
| JavaScript | Float32Arrayなど | Number |
| Python(一般的な実装) | array・NumPy等で指定 | float |
Float32を選ぶ場面
- GPU、3Dグラフィックス、画像処理など大量の値を扱う
- 通信量や保存容量を抑えたい
- 約7桁の精度で要件を満たせる
- 機器やプロトコルが32ビット形式を指定している
Float64を選ぶ場面
- 科学技術計算や統計で誤差を小さくしたい
- 値の範囲がFloat32を超える
- 反復計算で丸め誤差が蓄積しやすい
- メモリより精度を優先する
相互変換するときの注意
Float64からFloat32へ変換すると、表現できない桁が丸められ、範囲を超えた値はInfinityになる可能性があります。Float32からFloat64へ広げても、すでに失われた情報は戻りません。
よくある質問
Float32は小数点以下何桁まで正確ですか?
小数点以下の固定桁数ではなく、全体で約7桁の10進有効桁が目安です。値の大きさによって小数部分に使える桁数は変わります。
Float64はFloat32のちょうど2倍正確ですか?
いいえ。保存容量は2倍ですが、仮数部は23ビットから52ビットへ増えるため、10進有効桁は約7桁から約15〜16桁へ増えます。
JavaScriptのNumberはFloat32ですか?
通常のNumberはIEEE 754のFloat64相当です。Float32相当へ丸めたい場合はFloat32ArrayやMath.froundなどを使用します。
Float32からFloat64へ変換すると精度は戻りますか?
戻りません。Float32へ保存した時点で丸められた情報は、Float64へ変換しても復元できません。