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

조회수 6222회

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

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

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를 따르는 컴파일러라면 이 방법이 통해야 하지만 최적화에서도 지켜지는지는 확신할 수 없습니다. 해당 컴파일러에서 미리 확인해보고 쓰는 걸 권장합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)