浮動小数点の誤差に関するメモ¶
相関係数などの統計数値のテストコードを書いていた時に、丸め誤差により悩んでいた時のメモ。
link¶
- [計算機イプシロン(machine epsilon)] (https://ja.wikipedia.org/wiki/%E8%A8%88%E7%AE%97%E6%A9%9F%E3%82%A4%E3%83%97%E3%82%B7%E3%83%AD%E3%83%B3)
- Python 標準ライブラリ 9.4. decimal — 10進固定及び浮動小数点数の算術演算
numpyの場合¶
epsilon -> eps¶
In [10]: np.finfo(np.float).eps
Out[10]: 2.2204460492503131e-16
In [11]: np.finfo(float).eps
Out[11]: 2.2204460492503131e-16
In [12]: np.finfo(np.float32).eps
Out[12]: 1.1920929e-07
In [13]: np.finfo(np.float64).eps
Out[13]: 2.2204460492503131e-16
In [14]: np.finfo(np.float128).eps
Out[14]: 1.084202172485504434e-19
他の型は調べてない。
code¶
https://github.com/numpy/numpy/search?l=python&q=eps&type=Code
test codeだけでなく、product codeとissueにも引っかかった
roundで丸めてテスト?¶
https://github.com/numpy/numpy/blob/467d4e16d77a2e7c131aac53c639e82b754578c7/numpy/lib/tests/test_financial.py#L49
sysの場合¶
In [25]: import sys
In [26]: sys.float_info
Out[26]: sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
epsだけでなく、最大値や桁数に関する情報があった。
まとめ¶
- まとまってない
- あとで追記するかも