부동 소수점 비교 이상
부동 소수점 비교의 개념은 오해의 소지가 있을 수 있으며, 특히 부동 소수점 데이터 유형을 다룰 때 더욱 그렇습니다. 다음 예를 고려하십시오.
int main() { float a = 0.7; float b = 0.5; if (a < 0.7) { if (b < 0.5) printf("2 are right"); else printf("1 is right"); } else printf("0 are right"); }
초기 조건이 false이므로 직관적으로 이 코드는 "0이 맞습니다"를 출력한다고 가정할 수 있습니다. 그런데 놀랍게도 실제 출력은 "1이 옳습니다."
설명
설명은 부동 소수점 숫자의 내부 표현에 있습니다. C에서는 비교 중에 float가 double로 승격되며 double이 float보다 더 정확합니다. 결과적으로 float로서의 0.7은 double로서의 0.7과 정확히 동일하지 않습니다. 0.7(float)이 double로 승격되면 0.7(double)보다 약간 작아집니다.
반면 0.5(float)는 double로 정확한 표현이 됩니다. 정도. 따라서, 조건 b < 0.5가 평가되면 0.5(더블)가 자신보다 작지 않기 때문에 false를 반환합니다.
해결책
이 문제를 해결하려면 다음 중 하나를 수행하세요.
이러한 솔루션 중 하나를 구현하면 "0이 맞습니다."라는 원하는 출력을 얻을 수 있습니다.
위 내용은 C의 부동 소수점 비교가 때때로 예상치 못한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!