부동 소수점 타입의 변수를 비교 연산할 경우 잘못된 결과가 나올 수 있습니다.
int main() { float x = 0.03f; float y = 0.1f; y += 0.06; y += 0.01; if (x == y) printf("x == y\n"); else printf("x != y\n"); }
위 예제는 부동 소수점을 비교할 때 발생하는 알려진 이슈로 x와 y를 비교 연산한 결과가 false가 나오는 경우가 대표적인 예 입니다.
해당 이슈는 도구의 버그가 아니라 도구가 일부 부동 소수점 비교 연산을 직접 하는 경우 발생할 수 있는 버그를 발견한 이슈로 보셔야 할 것 같습니다.
int compareValues(float val1, float val2){ float diff = val1 - val2; float tolerance = 0.0001f; int result = 0; if (diff < tolerance){ result = 0; }else { result = 1; } return result; } int main() { float x = 0.03f; float y = 0.1f; y += 0.06; y += 0.01; if (compareValues(x,y) == 0) printf("x == y\n"); else printf("x != y\n"); }
이러한 경우 위 예제와 같이 간단한 비교 함수를 작성하여 오차 허용 범위 내에서 값을 비교하여 해결할 수 있습니다.
자세한 내용은 아래 링크를 참조 부탁 드립니다.
https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
http://devmachine.blog.me/220119534107
자세한 방법은 Controller Tester Troubleshooting Guides를 참고해주세요.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.