Double과 Float를 비교할 때 예상치 못한 결과
float 변수 f와 같은 값 1.1을 갖는 double 변수 d를 비교하면 놀랍게도 결과가 나옵니다. 거짓. 이 예상치 못한 결과는 부동 소수점 숫자의 기본 특성에서 비롯됩니다.
부동 소수점 숫자의 정밀도와 반올림
부동 소수점 및 double 유형을 포함한 부동 소수점 숫자 , 고유한 한계가 있습니다:
정밀도: 부동 소수점 숫자는 유한한 유효 자릿수 내에서 실수를 나타냅니다. 데이터 유형이 처리할 수 있는 것보다 더 높은 정밀도가 필요한 값은 잘린 표현이 됩니다.
반올림: 이진수는 항상 정확한 소수 표현을 갖지 않습니다. 이진수를 십진수로 변환할 때 부동 소수점 유형의 제한된 정밀도에 맞추기 위해 반올림이 발생합니다.
비교에 미치는 영향
이러한 요인으로 인해 float 및 double 값은 반올림 오류가 발생할 수 있습니다. 이러한 오류는 동일해야 하는 두 숫자를 비교할 때 불일치를 일으킬 수 있습니다. 주어진 예에서 1.1의 float 및 double 표현은 반올림으로 인해 약간 변형되어 f != d라는 직관에 반하는 결과를 가져옵니다.
모범 사례
부동 소수점 숫자 간의 직접적인 동등 비교를 피하십시오. 대신, 값 간의 절대적인 차이를 평가하고 이를 허용 가능한 임계값(엡실론)과 비교하는 것을 선택하십시오.
if (abs(x - y) < epsilon) { ... }
이 접근 방식은 부동 소수점 연산의 본질적인 부정확성을 설명하고 보다 안정적인 방법을 제공합니다. 두 값이 본질적으로 동일한지 확인합니다.
위 내용은 동일한 값을 갖는 Float와 Double을 비교하면 False가 반환되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!