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
Défini dans l'en-tête <math.h>
#define isnan(arg) /* implementation defined */
(depuis C99)

Détermine si le nombre à virgule flottante donné arg est une valeur non numérique (NaN). La macro retourne une valeur entière.

FLT_EVAL_METHOD est ignoré : même si l'argument est évalué avec plus de portée et de précision que son type, il est d'abord converti en son type sémantique, et la classification est basée sur celui-ci (cela importe si le type d'évaluation prend en charge les NaNs, tandis que le type sémantique ne le fait pas).

Table des matières

Paramètres

arg - valeur à virgule flottante

Valeur de retour

Valeur entière non nulle si arg est un NaN, 0 sinon.

Notes

Il existe de nombreuses valeurs NaN différentes avec des bits de signe et des charges utiles variés, consultez nan .

Les valeurs NaN ne sont jamais égales à elles-mêmes ou à d'autres valeurs NaN. La copie d'un NaN peut modifier son motif de bits.

Une autre manière de tester si une valeur à virgule flottante est NaN est de la comparer avec elle-même : bool is_nan ( double x ) { return x ! = x ; }

Exemple

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

Sortie possible :

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

Références

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

Voir aussi

(C99) (C99) (C99)
retourne un NaN (not-a-number)
(fonction)
classe la valeur en virgule flottante donnée
(macro de fonction)
vérifie si le nombre donné a une valeur finie
(macro de fonction)
(C99)
vérifie si le nombre donné est infini
(macro de fonction)
vérifie si le nombre donné est normal
(macro de fonction)
vérifie si deux valeurs en virgule flottante ne sont pas ordonnées
(macro de fonction)