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
Definiert im Header <math.h>
#define fpclassify(arg) /* implementation defined */
(seit C99)

Kategorisiert den Gleitkommawert arg in folgende Kategorien: Null, subnormal, normal, unendlich, NAN oder implementierungsdefinierte Kategorie. Das Makro gibt einen ganzzahligen Wert zurück.

FLT_EVAL_METHOD wird ignoriert: selbst wenn das Argument mit größerer Reichweite und Genauigkeit als sein Typ ausgewertet wird, wird es zuerst in seinen semantischen Typ konvertiert, und die Klassifizierung basiert darauf: ein normaler long double-Wert kann subnormal werden, wenn er in double konvertiert wird, und null, wenn er in float konvertiert wird.

Inhaltsverzeichnis

Parameter

arg - Gleitkommawert

Rückgabewert

Einer von FP_INFINITE , FP_NAN , FP_NORMAL , FP_SUBNORMAL , FP_ZERO oder einem implementierungsdefinierten Typ, der die Kategorie von arg spezifiziert.

Beispiel

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

Ausgabe:

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

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.12.3.1 Das fpclassify-Makro (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.12.3.1 Das fpclassify-Makro (S.: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.12.3.1 Das fpclassify-Makro (S: 235)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.12.3.1 Das fpclassify-Makro (S: 216)

Siehe auch

prüft, ob die gegebene Zahl einen endlichen Wert hat
(Funktionsmakro)
(C99)
prüft, ob die gegebene Zahl unendlich ist
(Funktionsmakro)
(C99)
prüft, ob die gegebene Zahl NaN ist
(Funktionsmakro)
prüft, ob die gegebene Zahl normal ist
(Funktionsmakro)
C++ documentation für fpclassify