web-dev-qa-db-ja.com

Pythonのイプシロンの値

Pythonのイプシロン(または取得方法)の標準値はありますか?浮動小数点値を比較し、可能な限り小さい差と比較する必要があります。

C++には、numeric_limits::epsilon( )という関数があり、任意のデータ型のイプシロン値を提供します。 Pythonに同等のものはありますか?

49
thornate

情報は sys.float_info 、これはC99のfloat.hに対応します。

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
103
strcat

strcat posted のように、sys.float_info.epsilon

しかし、浮動小数点比較の絶対誤差として使用することの落とし穴を忘れないでください。例えば。数値が大きい場合、丸め誤差はイプシロンを超える可能性があります。

復習が必要だと思う場合、標準のリファレンスはDavid Goldbergの 浮動小数点演算についてすべてのコンピューター科学者が知っておくべきこと 、またはより簡単なレビューについてはチェックアウトできます 浮動小数点ガイド

27
Ergwun

驚いた人はここでこれについて言及していませんでした。多くの人が numpy.finfo(type(variable)).eps を代わりに使用すると思います。または.resolution精度を評価する場合。

finfoは浮動小数点型専用であり、Python独自のfloat型でも機能することに注意してください(つまり、numpyの型に限定されません)。整数型に相当するのは iinfo ですが、精度情報は含まれていません(それはなぜでしょうか?)。

2
Sheljohn

それを行う関数が見つからない場合、機械の精度を計算するアルゴリズムは非常に簡単であることに注意してください(お好みのプログラミング言語でテストできます)。

eps = 1.0
while eps + 1 > 1:
    eps /= 2
eps *= 2
print("The machine precision is:", eps)

私の場合、私は得た:

The machine precision is: 2.220446049250313e-16

0
Navaro