Pythonのイプシロン(または取得方法)の標準値はありますか?浮動小数点値を比較し、可能な限り小さい差と比較する必要があります。
C++には、numeric_limits::epsilon( )
という関数があり、任意のデータ型のイプシロン値を提供します。 Pythonに同等のものはありますか?
情報は sys.float_info
、これはC99のfloat.hに対応します。
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
strcat posted のように、sys.float_info.epsilon
。
しかし、浮動小数点比較の絶対誤差として使用することの落とし穴を忘れないでください。例えば。数値が大きい場合、丸め誤差はイプシロンを超える可能性があります。
復習が必要だと思う場合、標準のリファレンスはDavid Goldbergの 浮動小数点演算についてすべてのコンピューター科学者が知っておくべきこと 、またはより簡単なレビューについてはチェックアウトできます 浮動小数点ガイド 。
驚いた人はここでこれについて言及していませんでした。多くの人が numpy.finfo(type(variable)).eps を代わりに使用すると思います。または.resolution
精度を評価する場合。
finfo
は浮動小数点型専用であり、Python独自のfloat
型でも機能することに注意してください(つまり、numpyの型に限定されません)。整数型に相当するのは iinfo
ですが、精度情報は含まれていません(それはなぜでしょうか?)。
それを行う関数が見つからない場合、機械の精度を計算するアルゴリズムは非常に簡単であることに注意してください(お好みのプログラミング言語でテストできます)。
eps = 1.0
while eps + 1 > 1:
eps /= 2
eps *= 2
print("The machine precision is:", eps)
私の場合、私は得た:
The machine precision is: 2.220446049250313e-16