double/float이 NaN인지 확인하는 법?


C++에는 isnan()같은 함수가 있나요? C에서는 <math.h>에 있었는데 C++<cmath>는 없네요?

*아, 저는 MinGW를 쓰고 있습니다.

  • 2016년 01월 15일에 작성됨

조회수 371


1 답변


좋아요
0
싫어요
채택취소하기

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 valueNaN value끼리 비교한 결과는 항상 false라고 합니다.

즉, float/double f에 대해 f != f는 항상 true라는 얘기이지요.

원칙적으로는 IEEE floating point를 따르는 컴파일러라면 이 방법이 통해야 하지만 최적화에서도 지켜지는지는 확신할 수 없습니다. 해당 컴파일러에서 미리 확인해보고 쓰는 걸 권장합니다.

  • 2016년 01월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close