浮動小数点
符号・仮数 ・指数 で実数を近似する表現。IEEE 754 が標準。
精度#
| 型 | ビット | 仮数 | 有効桁(10進) | 機械イプシロン |
|---|---|---|---|---|
| float32 | 32 | 23+1 | 約 7 桁 | |
| float64 | 64 | 52+1 | 約 16 桁 |
機械イプシロン は となる最小の 。 相対誤差の下限を与える。
実数と違うところ#
- 等間隔でない。 0 の近くは密、大きい数では疎
- 結合律が成り立たない。
- 0.1 を正確に表せない。 2 進で循環小数になる
python
0.1 + 0.2 == 0.3 # False
0.1 + 0.2 # 0.30000000000000004浮動小数点の等値比較は避ける。 許容誤差を設けて比較する。
特殊な値#
、NaN、、非正規化数。
NaN はどの値とも(自分自身とも)等しくないので、
x != x が NaN の判定になる。
参考文献#
- David Goldberg. What Every Computer Scientist Should Know About Floating-Point Arithmetic. ACM Computing Surveys 23(1), 1991. https://doi.org/10.1145/103162.103163
- IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019). https://doi.org/10.1109/IEEESTD.2019.8766229
- Nicholas J. Higham. Accuracy and Stability of Numerical Algorithms, 2nd ed. SIAM, 2002. https://doi.org/10.1137/1.9780898718027