Python中的epsilon是否存在標準值(或獲取方法)?我需要比較浮點值並希望與最小的可能差異進行比較。Python中的epsilon值
在C++中提供了一個函數numeric_limits::epsilon()
它給出了任何給定數據類型的epsilon值。 Python中是否有等價物?
Python中的epsilon是否存在標準值(或獲取方法)?我需要比較浮點值並希望與最小的可能差異進行比較。Python中的epsilon值
在C++中提供了一個函數numeric_limits::epsilon()
它給出了任何給定數據類型的epsilon值。 Python中是否有等價物?
該信息在sys.float_info
中可用,它對應於C99中的float.h。
>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
由於strcat posted,有sys.float_info.epsilon
。
但是不要忘記使用它作爲浮點比較的絕對誤差的缺陷。例如。對於大數目,舍入誤差可能超過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'指定epsilon,使用'sys.float_info';僅僅爲此使用NumPy會很奇怪。如果您在* NumPy *類型('np.float32','np.float64'等)的值之後,則使用'numpy.finfo'。 – 2018-03-03 09:48:55
更改了措辭。爲了澄清,'np.finfo(float)'_does_ work,但我同意如果你從不使用numpy,那麼安裝這個包就太矯枉過正了。 – Sheljohn 2018-03-03 17:36:52
對,但'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
當比較漂浮物時,值的大小會影響epsilon。 – 2012-03-02 05:38:34
請考慮值中的錯誤可能會在操作中傳播。 「數值分析」領域專門研究這一點。 [This](http://floating-point-gui.de/errors/propagation/)網站也提供了一些可遵循的良好規則。 – Darthfett 2012-05-09 20:03:23