double/float이 NaN인지 확인하는 법?
조회수 6223회
1 답변
-
C++11의 경우
C++11
의<cmath>
는std::isnan()
을 지원합니다. 함수 원형은 다음과 같고, 인자가NaN
이면true
를, 그렇지 않으면false
를 return 합니다.bool isnan( float arg ); (since C++11) bool isnan( double arg ); (since C++11) bool isnan( long double arg ); (since C++11)
C++11 미만인 경우
IEEE standard
에 따르면NaN value
는NaN value
끼리 비교한 결과는 항상false
라고 합니다.즉,
float/double f
에 대해f != f
는 항상true
라는 얘기이지요.원칙적으로는
IEEE floating point
를 따르는 컴파일러라면 이 방법이 통해야 하지만 최적화에서도 지켜지는지는 확신할 수 없습니다. 해당 컴파일러에서 미리 확인해보고 쓰는 걸 권장합니다.
댓글 입력