C <math.h> - FP_NAN, FP_INFINITE, FP_ZERO, FP_SUBNORMAL, FP_NORMAL
The C <math.h> FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN macros represents distinct category of floating-point numbers and possible values returned by fpclassify function. These macros expand to an integer constant expression.
Macros | Description |
---|---|
FP_NAN | indicates that the value is not-a-number (NaN). |
FP_INFINITE | indicates that the value is positive or negative infinity (overflow). |
FP_ZERO | indicates that the value is positive or negative zero. |
FP_SUBNORMAL | indicates that the value is subnormal (underflow). |
FP_NORMAL | indicates that the value is normal, i.e. not an infinity, subnormal, not-a-number or zero. |
Definition in the <cmath> header file is:
#define FP_NAN /* implementation defined */ #define FP_INFINITE /* implementation defined */ #define FP_ZERO /* implementation defined */ #define FP_SUBNORMAL /* implementation defined */ #define FP_NORMAL /* implementation defined */
Example:
The example below shows the usage of these macros.
#include <stdio.h> #include <float.h> #include <math.h> const char* Show_Classification (double x) { switch(fpclassify(x)) { case FP_NAN: return "nan."; case FP_INFINITE: return "inf."; case FP_ZERO: return "zero."; case FP_SUBNORMAL: return "subnormal."; case FP_NORMAL: return "normal."; default: return "unknown."; } } int main (){ printf("1.0/0.0 is %s\n", Show_Classification(1.0/0.0)); printf("0.0/0.0 is %s\n", Show_Classification(0.0/0.0)); printf("DBL_MIN/3 is %s\n", Show_Classification(DBL_MIN/3)); printf("-0.0 is %s\n", Show_Classification(-0.0)); printf("10.5 is %s\n", Show_Classification(10.5)); return 0; }
The output of the above code will be:
1.0/0.0 is inf. 0.0/0.0 is nan. DBL_MIN/3 is subnormal. -0.0 is zero. 10.5 is normal.
❮ C <math.h> Library