Namespaces
Variants

fpclassify

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
fpclassify
(C99)
(C99)
(C99)
(C99)
(C23)
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 fpclassify(arg) /* implementation defined */
(depuis C99)

Catégorise la valeur en virgule flottante arg dans les catégories suivantes : zéro, sous-normal, normal, infini, NAN, ou catégorie définie par l'implémentation. 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 cela : une valeur normale de type long double peut devenir sous-normale lorsqu'elle est convertie en double et zéro lorsqu'elle est convertie en float .

Table des matières

Paramètres

arg - valeur en virgule flottante

Valeur de retour

L'une des valeurs FP_INFINITE , FP_NAN , FP_NORMAL , FP_SUBNORMAL , FP_ZERO ou un type défini par l'implémentation, spécifiant la catégorie de arg .

Exemple

#include <float.h>
#include <math.h>
#include <stdio.h>
const char* show_classification(double x)
{
    switch(fpclassify(x))
    {
        case FP_INFINITE:  return "Inf";
        case FP_NAN:       return "NaN";
        case FP_NORMAL:    return "normal";
        case FP_SUBNORMAL: return "subnormal";
        case FP_ZERO:      return "zero";
        default:           return "unknown";
    }
}
int main(void)
{
    printf("1.0/0.0 is %s\n", show_classification(1 / 0.0));
    printf("0.0/0.0 is %s\n", show_classification(0.0 / 0.0));
    printf("DBL_MIN/2 is %s\n", show_classification(DBL_MIN  / 2));
    printf("-0.0 is %s\n", show_classification(-0.0));
    printf("1.0 is %s\n", show_classification(1.0));
}

Sortie :

1.0/0.0 is Inf
0.0/0.0 is NaN
DBL_MIN/2 is subnormal
-0.0 is zero
1.0 is normal

Références

  • Norme C23 (ISO/IEC 9899:2024) :
  • 7.12.3.1 La macro fpclassify (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.12.3.1 La macro fpclassify (p: TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.12.3.1 La macro fpclassify (p: 235)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.12.3.1 La macro fpclassify (p: 216)

Voir aussi

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)
(C99)
vérifie si le nombre donné est NaN
(macro de fonction)
vérifie si le nombre donné est normal
(macro de fonction)
Documentation C++ pour fpclassify