정밀도 보존과 부동 소수점 값 비교
부동 소수점 비교는 정밀도 손실로 인해 어려움을 겪습니다. ==를 사용하여 단순히 double 또는 float를 비교하는 것은 신뢰할 수 없습니다.
Epsilon 기반 비교
한 가지 접근 방식은 엡실론(ε) 임계값을 사용하여 정밀도 손실을 설명하는 것입니다.
bool CompareDoubles2(double A, double B) { double diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); }
그러나 이 접근 방식은 비효율적입니다.
상황에 따른 고려 사항
비교 방법의 선택은 상황과 예상 값에 따라 다릅니다. 다음과 같은 잠재적 위험을 고려하십시오.
Standard Epsilon
std::numeric_limits 정수 연산의 결과 정수 값을 유지하기 위해 double을 사용하면 올바른 결과가 나올 수 있습니다. 정수 범위 밖의 분수나 값은 피하는 한 산술입니다. 예를 들어 4.0/2.0은 1.0 1.0과 같습니다. 위 내용은 정밀도 손실을 고려하면서 부동 소수점 값을 어떻게 정확하게 비교할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!