浮動小数点の誤差に関するメモ

相関係数などの統計数値のテストコードを書いていた時に、丸め誤差により悩んでいた時のメモ。

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だけでなく、最大値や桁数に関する情報があった。

まとめ

  • まとまってない
  • あとで追記するかも

おまけ

知らなかった…

In [15]: 1.
Out[15]: 1.0