Double 및 Float 데이터 유형을 비교할 때 예상치 못한 결과
배정밀도 부동 소수점 숫자(double)와 단정밀도 부동 소수점을 비교할 때 숫자(부동 소수점)를 사용하면 예상치 못한 결과가 발생할 수 있습니다. 특히, float 변수 f와 double 변수 d 사이의 동일성 검사(f == d)는 두 값이 동일해 보이더라도 false를 반환할 수 있습니다.
이 동작은 부동과 관련된 두 가지 기본 요소에서 비롯됩니다. 점 숫자: 정밀도 및 반올림.
정밀도 및 반올림 오류
동일성 검사에 대한 의미
부동 소수점 숫자에 내재된 정밀도와 반올림 포인트 번호는 특히 서로 매우 가까운 값을 비교할 때 반올림 오류로 이어질 수 있습니다. 이러한 오류가 누적되어 동등 비교가 실패하게 됩니다. 이로 인해 부동 소수점 숫자에 대한 직접 동등성 검사가 신뢰할 수 없게 되고 거짓 부정이 발생하기 쉽습니다.
해결책: Epsilon과 비교
등등 검사를 사용하는 대신 더 안정적인 부동 소수점 숫자를 비교하는 방법은 둘 사이의 절대적인 차이를 취하여 그것이 엡실론(ε)이라고 알려진 작은 값보다 작은지 확인하는 것입니다. 이를 통해 반올림 오류를 설명하고 해당 차이가 애플리케이션에 중요하지 않은지 판단할 수 있습니다.
if (abs(x - y) < epsilon)
위 내용은 'float' 값과 'double' 값을 비교하면 동일해 보이는 경우에도 가끔 'false'가 반환되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!