부동 소수점 타입의 고유 특성은 비교가 예상이 돼도 equality는 잘 쓰지 않는다고 한다.
즉, 부동소수점은 0과 같다(==) 같지 않다(!=) 를 직간접적으로 쓰지 않는 게 좋다는 것
기계 엡실론을 쓰면 된다.
std::numeric_limits<T>::epsilon()
float fVal1;
float fVal2;
if(fVal1==fVal2) {} // 지양
if(fVal1-fVal2==0.0f) {} // 지양
if(fabs(fVal1-fVal2) > std::numeric_limits<float>::epsilon()){
std::cout << " fVal1 - fVal2 는 0이 아니다." << std::endl;
}
if(fabs(fVal1-fVal2) < std::numeric_limits<float>::epsilon()){
std::cout << " fVal1 - fVal2 는 0이다.(fVal1==fVal2)" << std::endl;
}
Ref :
https://docs.microsoft.com/ko-kr/cpp/standard-library/numeric-limits-class?view=msvc-170
https://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
'C++ > 이게 왜 돼 ❔❔❔' 카테고리의 다른 글
[MFC] 다른 클래스에서 다이얼로그의 컨트롤 사용하기 ( 순환참조 피하기 ) (0) | 2022.03.24 |
---|---|
[C++] 간단하게 코드 속도 측정 (0) | 2022.02.23 |
[C++] 현재(시스템) 시간, 날짜 구하기 (0) | 2022.02.23 |
[MFC] 파일 선택 다이얼로그 띄우기 (0) | 2022.02.12 |
[C++] 숫자 세자리 수 마다 콤마(,) 찍기 (0) | 2022.02.11 |
댓글