파이썬에서 엡실론의 표준 값 (또는 얻는 방법)이 있습니까? 부동 소수점 값을 비교해야하며 가능한 가장 작은 차이와 비교하려고합니다.파이썬의 엡실론 값
C++에는 지정된 데이터 형식에 대해 엡실론 값을 제공하는 numeric_limits::epsilon()
의 기능이 있습니다. 파이썬에 상응하는 것이 있습니까?
파이썬에서 엡실론의 표준 값 (또는 얻는 방법)이 있습니까? 부동 소수점 값을 비교해야하며 가능한 가장 작은 차이와 비교하려고합니다.파이썬의 엡실론 값
C++에는 지정된 데이터 형식에 대해 엡실론 값을 제공하는 numeric_limits::epsilon()
의 기능이 있습니다. 파이썬에 상응하는 것이 있습니까?
이 정보는 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를 사용하지는 않습니다. 파이썬 *의'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'로 바꾸고 그 내용을보고합니다. 그래서 파이썬의'float'이 아닌 NumPy 타입에 대한보고입니다. (비록 floft와 np.float64가 같은 형식을 가지고있을 가능성이 압도적으로 높다. 둘 다 C에서 double을 사용하고있다.) –
부동 소수점을 비교할 때 값의 크기가 엡실론에 영향을줍니다. –
또한 값의 오류가 작업 전반에 전파 될 수 있다고 생각하십시오. "수치 해석"필드는이 연구에 사용됩니다. [This] (http://floating-point-gui.de/errors/propagation/) 사이트는 따라야 할 좋은 규칙을 제공합니다. – Darthfett