バックグラウンド
Matlab の組み込みeps
関数 [1] は、数値を取り、「同じ精度の浮動小数点数が次に大きい数値X
までの正の距離」を返すことができます。abs(X)
>> eps(1)
ans =
2.2204e-16
>> eps(single(1))
ans =
1.1921e-07
>> eps(1e6)
ans =
1.1642e-10
>> eps(single(1e6))
ans =
0.0625
同様に、Numpy はspacing
関数 [2]を提供します。
In [18]: import numpy as np
In [19]: np.spacing(1)
Out[19]: 2.2204460492503131e-16
In [20]: np.spacing(np.single(1))
Out[20]: 1.1920929e-07
In [21]: np.spacing(1e6)
Out[21]: 1.1641532182693481e-10
In [22]: np.spacing(np.single(1e6))
Out[22]: 0.0625
質問
Java (および Clojure のような JVM 言語) に同等の関数はありますか?
参考文献
- [1] http://www.mathworks.com/help/matlab/ref/eps.html
- [2] https://github.com/numpy/numpy/blob/master/numpy/core/code_generators/ufunc_docstrings.py#L2905のドキュメント。
- C での実際の関数の実装はhttps://github.com/numpy/numpy/blob/master/numpy/core/src/npymath/ieee754.c.src#L323にあるようです(npy_nextafter の前のライセンス バナーで質問が表示されますちょっと皮肉)。