Pythonでイプシロンの標準値(または取得する方法)はありますか?私は浮動小数点値を比較する必要があり、可能な限り小さな差と比較したいと思っています。Pythonのイプシロンの値
C++には、与えられたデータ型のイプシロン値を与える関数numeric_limits::epsilon()
があります。 Pythonには同等のものがありますか?
Pythonでイプシロンの標準値(または取得する方法)はありますか?私は浮動小数点値を比較する必要があり、可能な限り小さな差と比較したいと思っています。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のWhat Every Computer Scientist Should Know About Floating-Point Arithmeticです。レビューを簡単にするために、The Floating Point Guideを参照してください。
驚いたことに、多くの人が代わりにnumpy.finfo(type(variable)).epsを使用すると思います。精度を評価する場合は.resolution
となります。
finfo
は浮動小数点型のみであり、Python独自のfloat
型(numpyの型に限定されない)でも動作することに注意してください。整数型の等価はiinfo
ですが、正確な情報は含まれていません(なぜなら、それはなぜでしょうか?)。
「ほとんどの人」について意見が異なります。誰もがNumPyを使用するわけではありません。 * Python *の 'float'のためにイプシロンを使いたい場合は' sys.float_info'を使います;そのためにNumPyを使用するのは奇妙なことです。 * NumPy *型( 'np.float32'、' np.float64'など)の値の後ろにいるなら、 'numpy.finfo'を使います。 –
言い回しを変更しました。しかし、明確にするために 'np.finfo(float)' _does_は働いていますが、numpyを使用しないと、それだけでパッケージをインストールするのは残念です。 – Sheljohn
NumPy [即時変換](https://github.com/numpy/numpy/blob/6914bb41f0fb3c1ba500bae4e7d671da9536786f/numpy/core/getlimits.py#L378)ので、正しく、 'np.finfo(float)'は少し誤解を招くことがあります。 'float'を' np.float64'にコピーし、その詳細を報告します。したがって、Pythonの 'float'ではなく、NumPy型を再び報告しています。 (確かに、 'float'と' np.float64'は同じフォーマットです:彼らは両方ともCダブルスをフードの下で使用しています)。 –
浮動小数点数を比較すると、値の大きさがイプシロンに影響します。 –
また、値のエラーが操作全体に伝播する可能性があることも考慮してください。フィールド「数値解析」は、この研究に専念しています。 [This](http://floating-point-gui.de/errors/propagation/)サイトにも、従うべき良い規則がいくつかあります。 – Darthfett