>  기사  >  백엔드 개발  >  동일한 값을 갖는 Float와 Double을 비교하면 False가 반환되는 이유는 무엇입니까?

동일한 값을 갖는 Float와 Double을 비교하면 False가 반환되는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-31 15:40:56524검색

Why Does Comparing a Float and a Double With the Same Value Return False?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.