Namespaces
Variants

isnan

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Definido en el encabezado <math.h>
#define isnan(arg) /* implementation defined */
(desde C99)

Determina si el número de punto flotante dado arg es un valor no-numérico (NaN). La macro devuelve un valor integral.

FLT_EVAL_METHOD se ignora: incluso si el argumento se evalúa con más rango y precisión que su tipo, primero se convierte a su tipo semántico, y la clasificación se basa en eso (esto importa si el tipo de evaluación admite NaNs, mientras que el tipo semántico no lo hace).

Contenidos

Parámetros

arg - valor de punto flotante

Valor de retorno

Valor integral distinto de cero si arg es un NaN, 0 en caso contrario.

Notas

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

Los valores NaN nunca son iguales a sí mismos ni a otros valores NaN. Copiar un NaN puede cambiar su patrón de bits.

Otra forma de comprobar si un valor de punto flotante es NaN es comparándolo consigo mismo: bool is_nan ( double x ) { return x ! = x ; }

Ejemplo

#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
    printf("isnan(NAN)         = %d\n", isnan(NAN));
    printf("isnan(INFINITY)    = %d\n", isnan(INFINITY));
    printf("isnan(0.0)         = %d\n", isnan(0.0));
    printf("isnan(DBL_MIN/2.0) = %d\n", isnan(DBL_MIN / 2.0));
    printf("isnan(0.0 / 0.0)   = %d\n", isnan(0.0 / 0.0));
    printf("isnan(Inf - Inf)   = %d\n", isnan(INFINITY - INFINITY));
}

Salida posible:

isnan(NAN)         = 1
isnan(INFINITY)    = 0
isnan(0.0)         = 0
isnan(DBL_MIN/2.0) = 0
isnan(0.0 / 0.0)   = 1
isnan(Inf - Inf)   = 1

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.12.3.4 La macro isnan (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.12.3.4 La macro isnan (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.12.3.4 The isnan macro (p: 236-237)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.12.3.4 La macro isnan (p: 217)

Véase también

(C99) (C99) (C99)
devuelve un NaN (no es un número)
(función)
clasifica el valor de punto flotante dado
(macro de función)
verifica si el número dado tiene valor finito
(macro de función)
(C99)
verifica si el número dado es infinito
(macro de función)
verifica si el número dado es normal
(macro de función)
verifica si dos valores de punto flotante están desordenados
(macro de función)