| 類型 | 符號位 | 指數位 | 尾數位 | 總位數 |
|---|---|---|---|---|
| float | 1 | 8 | 23 | 32 |
| double | 1 | 11 | 52 | 64 |
數值表示:(-1)^S × 1.M × 2^(E - bias),其中 M 為尾數小數部分,隱含整數位 1;bias 為指數偏移(float 127,double 1023)。
(2 - 2^-23) × 2^127 ≈ 3.4028235 × 10^38(2 - 2^-52) × 2^1023 ≈ 1.7976931348623157 × 10^3082^-126 ≈ 1.17549435 × 10^-382^-1022 ≈ 2.2250738585072014 × 10^-308log10(2^24) ≈ 7.22 → 6~7 位(保證 6 位)。log10(2^53) ≈ 15.95 → 15~16 位(保證 15 位)。2^-23 ≈ 1.19e-72^-52 ≈ 2.22e-16浮點數與 0 比較大小,或判斷相等,需引入容差:
const float EPS = 1e-6f; // 對應 float 精度
const double EPS = 1e-12; // 對應 double 精度
if (fabs(a - b) <= EPS) // 視為相等
ε 直接源於尾數位數:最小可區分的相對差異約為 2^(-尾數位)。
float:32 位,範圍 ~10^±38,精度 6~7 位。
double:64 位,範圍 ~10^±308,精度 15~16 位。
指數決定「能表示多大/多小」,尾數決定「能分多細」。現代 CPU double 運算無性能劣勢,除非嵌入式/顯存/帶寬極其受限,默認使用 double。