2012-03-02 138 views
36

Python中的epsilon是否存在標準值(或獲取方法)?我需要比較浮點值並希望與最小的可能差異進行比較。Python中的epsilon值

在C++中提供了一個函數numeric_limits::epsilon()它給出了任何給定數據類型的epsilon值。 Python中是否有等價物?

+5

當比較漂浮物時,值的大小會影響epsilon。 – 2012-03-02 05:38:34

+1

請考慮值中的錯誤可能會在操作中傳播。 「數值分析」領域專門研究這一點。 [This](http://floating-point-gui.de/errors/propagation/)網站也提供了一些可遵循的良好規則。 – Darthfett 2012-05-09 20:03:23

回答

79

該信息在sys.float_info中可用,它對應於C99中的float.h。

>>> import sys 
>>> sys.float_info.epsilon 
2.220446049250313e-16 
0

驚訝的人沒有提到這裏;我想很多人會用numpy.finfo(type(variable)).eps來代替。或者如果要評估精度,則需要.resolution

請注意finfo僅適用於浮點類型,並且它也適用於Python自己的float類型(即不限於numpy的類型)。整數類型的等價物是iinfo,雖然它不包含精度信息(因爲,它爲什麼會這樣?)。

+0

不同意「最多人」:不是每個人都使用NumPy。如果你想爲* Python *的'float'指定epsilon,使用'sys.float_info';僅僅爲此使用NumPy會很奇怪。如果您在* NumPy *類型('np.float32','np.float64'等)的值之後,則使用'numpy.finfo'。 – 2018-03-03 09:48:55

+0

更改了措辭。爲了澄清,'np.finfo(float)'_does_ work,但我同意如果你從不使用numpy,那麼安裝這個包就太矯枉過正了。 – Sheljohn 2018-03-03 17:36:52

+1

對,但'np.finfo(float)'有點誤導,因爲NumPy [立即轉換](https://github.com/numpy/numpy/blob/6914bb41f0fb3c1ba500bae4e7d671da9536786f/numpy/core/getlimits.py#L378)將'float'轉換爲'np.float64',然後報告詳細信息。所以它再次報告一個NumPy類型,而不是Python的'float'。 (雖然可以肯定的是,'float'和'np.float64'是相同的格式:它們都是在C罩下使用C doubles。) – 2018-03-03 18:39:03