# 浮動小数点の誤差に関するメモ 相関係数などの統計数値のテストコードを書いていた時に、丸め誤差により悩んでいた時のメモ。 ## 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進固定及び浮動小数点数の算術演算](http://docs.python.jp/3.4/library/decimal.html) ## numpyの場合 ### epsilon -> eps ```python3 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の場合 ```python3 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だけでなく、最大値や桁数に関する情報があった。 ## まとめ - まとまってない - あとで追記するかも ## おまけ 知らなかった… ```python3 In [15]: 1. Out[15]: 1.0 ```