Namespaces
Variants

std:: isnan

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
isnan
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
헤더에 정의됨 <cmath>
(1)
bool isnan ( float num ) ;

bool isnan ( double num ) ;

bool isnan ( long double num ) ;
(C++11 이후)
(C++23 이전)
constexpr bool isnan ( /*floating-point-type*/ num ) ;
(C++23 이후)
SIMD 오버로드 (C++26 이후)
헤더에 정의됨 <simd>
template < /*math-floating-point*/ V >

constexpr typename /*deduced-simd-t*/ < V > :: mask_type

isnan ( const V & v_num ) ;
(S) (C++26 이후)
헤더에 정의됨 <cmath>
template < class Integer >
bool isnan ( Integer num ) ;
(A) (C++11 이후)
(C++23부터 constexpr)
1) 주어진 부동 소수점 숫자 num 가 NaN(Not-a-Number) 값인지 판별합니다. 이 라이브러리는 매개변수 num 의 타입으로 모든 cv-unqualified 부동 소수점 타입에 대한 오버로드를 제공합니다. (C++23부터)
S) SIMD 오버로드는 v_num 에 대해 요소별(element-wise) std::isnan 을 수행합니다.
(정의는 math-floating-point deduced-simd-t 참조)
(C++26부터)
A) 모든 정수 타입에 대해 추가 오버로드가 제공되며, 이들은 double 로 처리됩니다.

목차

매개변수

num - 부동 소수점 또는 정수 값
v_num - 요소 타입이 부동 소수점 타입인 std::basic_simd 전문화의 데이터 병렬 객체

반환값

1) true 만약 num 이 NaN이면, false 그렇지 않으면.
S) i번째 요소가 범위 [ 0 , v_num. size ( ) ) 내의 모든 i에 대해 v_num [ i ] 이 NaN이면 true 를, 그렇지 않으면 false 를 갖는 데이터-병렬 마스크 객체.

참고 사항

서로 다른 부호 비트와 페이로드를 가진 다양한 NaN 값들이 존재합니다. 자세한 내용은 std::nan std::numeric_limits::quiet_NaN 을 참조하십시오.

NaN 값은 자기 자신이나 다른 NaN 값과 절대 동등하게 비교되지 않습니다. IEEE-754에 따르면 NaN을 복사할 때 비트 표현(부호와 payload )을 보존해야 할 의무는 없지만, 대부분의 구현체에서는 보존합니다.

부동 소수점 값이 NaN인지 테스트하는 또 다른 방법은 자기 자신과 비교하는 것입니다: bool is_nan ( double x ) { return x ! = x ; } .

GCC Clang -ffinite-math 옵션을 지원합니다 (이 옵션은 -ffast-math 에 의해 추가적으로 암시됨). 이 옵션은 각 컴파일러가 NaN, 무한대, 음의 영과 같은 특수 IEEE-754 부동 소수점 값이 존재하지 않는다고 가정하도록 허용합니다. 다시 말해, 이 옵션 하에서는 std::isnan 이 항상 false 를 반환한다고 가정합니다.

추가 오버로드는 반드시 (A) 와 동일하게 제공될 필요가 없습니다. 정수 타입의 인자 num 에 대해, std :: isnan ( num ) std :: isnan ( static_cast < double > ( num ) ) 와 동일한 효과를 보장할 수 있을 정도로만 제공되면 됩니다.

예제

#include <cfloat>
#include <cmath>
#include <iostream>
int main()
{
    std::cout << std::boolalpha
              << "isnan(NaN) = " << std::isnan(NAN) << '\n'
              << "isnan(Inf) = " << std::isnan(INFINITY) << '\n'
              << "isnan(0.0) = " << std::isnan(0.0) << '\n'
              << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN / 2.0) << '\n'
              << "isnan(0.0 / 0.0)   = " << std::isnan(0.0 / 0.0) << '\n'
              << "isnan(Inf - Inf)   = " << std::isnan(INFINITY - INFINITY) << '\n';
}

출력:

isnan(NaN) = true
isnan(Inf) = false
isnan(0.0) = false
isnan(DBL_MIN/2.0) = false
isnan(0.0 / 0.0)   = true
isnan(Inf - Inf)   = true

참고 항목

(C++11) (C++11) (C++11)
숫자가 아님(NaN)
(함수)
(C++11)
주어진 부동소수점 값을 분류함
(함수)
(C++11)
주어진 숫자가 유한한 값인지 확인함
(함수)
(C++11)
주어진 숫자가 무한인지 확인함
(함수)
(C++11)
주어진 숫자가 정규(normal)인지 확인함
(함수)
두 부동소수점 값이 비순서(unordered)인지 확인함
(함수)
C 문서 for isnan