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
Definido en el encabezado <math.h>
#define fpclassify(arg) /* definido por la implementación */
(desde C99)

Clasifica el valor de punto flotante arg en las siguientes categorías: cero, subnormal, normal, infinito, NAN, o categoría definida por la implementación. La macro devuelve un valor entero.

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: un valor normal de long double podría volverse subnormal cuando se convierte a double y cero cuando se convierte a float .

Contenidos

Parámetros

arg - valor de punto flotante

Valor de retorno

Uno de FP_INFINITE , FP_NAN , FP_NORMAL , FP_SUBNORMAL , FP_ZERO o un tipo definido por la implementación, que especifica la categoría de arg .

Ejemplo

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

Salida:

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

Referencias

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

Véase también

comprueba si el número dado tiene un valor finito
(macro de función)
(C99)
comprueba si el número dado es infinito
(macro de función)
(C99)
comprueba si el número dado es NaN
(macro de función)
comprueba si el número dado es normal
(macro de función)
Documentación de C++ para fpclassify