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
Definido en el encabezado <cmath>
(1)
bool isnan ( float num ) ;

bool isnan ( double num ) ;

bool isnan ( long double num ) ;
(desde C++11)
(hasta C++23)
constexpr bool isnan ( /*floating-point-type*/ num ) ;
(desde C++23)
Sobrecarga SIMD (desde C++26)
Definido en el encabezado <simd>
template < /*math-floating-point*/ V >

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

isnan ( const V & v_num ) ;
(S) (desde C++26)
Definido en el encabezado <cmath>
template < class Integer >
bool isnan ( Integer num ) ;
(A) (desde C++11)
(constexpr desde C++23)
1) Determina si el número de punto flotante dado num es un valor no-numérico (NaN). La biblioteca proporciona sobrecargas para todos los tipos de punto flotante sin calificación cv como el tipo del parámetro num . (desde C++23)
S) La sobrecarga SIMD realiza un std::isnan elemento por elemento en v_num .
(Ver math-floating-point y deduced-simd-t para sus definiciones.)
(desde C++26)
A) Se proporcionan sobrecargas adicionales para todos los tipos enteros, los cuales son tratados como double .

Contenidos

Parámetros

num - valor de punto flotante o entero
v_num - un objeto de datos paralelos de especialización std::basic_simd donde su tipo de elemento es un tipo de punto flotante

Valor de retorno

1) true si num es un NaN, false en caso contrario.
S) Un objeto máscara de datos paralelos donde el i th elemento es igual a true si v_num [ i ] es un NaN o false en caso contrario para todo i en el rango [ 0 , v_num. size ( ) ) .

Notas

Existen muchos valores NaN diferentes con distintos bits de signo y cargas útiles, consulte std::nan y std::numeric_limits::quiet_NaN .

Los valores NaN nunca son iguales a sí mismos ni a otros valores NaN. Copiar un NaN no requiere, según IEEE-754, preservar su representación binaria (signo y payload ), aunque la mayoría de las implementaciones lo hacen.

Otra forma de probar si un valor de punto flotante es NaN es compararlo consigo mismo: bool is_nan ( double x ) { return x ! = x ; } .

GCC y Clang soportan una opción -ffinite-math (adicionalmente implicada por -ffast-math ), que permite al compilador respectivo asumir la inexistencia de valores especiales de punto flotante IEEE-754 como NaN, infinito o cero negativo. En otras palabras, std::isnan se asume que siempre retorna false bajo esta opción.

Las sobrecargas adicionales no requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su argumento num de tipo entero, std :: isnan ( num ) tenga el mismo efecto que std :: isnan ( static_cast < double > ( num ) ) .

Ejemplo

#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';
}

Salida:

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

Véase también

(C++11) (C++11) (C++11)
no es un número (NaN)
(función)
(C++11)
categoriza el valor de punto flotante dado
(función)
(C++11)
verifica si el número dado tiene valor finito
(función)
(C++11)
verifica si el número dado es infinito
(función)
(C++11)
verifica si el número dado es normal
(función)
verifica si dos valores de punto flotante están desordenados
(función)