|
|
|
Defined in header <math.h> | ||
#define fpclassify(arg) /* implementation defined */ | (since C99) | |
Categorizes floating-point valuearg into the following categories: zero, subnormal, normal, infinite, NAN, or implementation-defined category. The macro returns an integral value.
FLT_EVAL_METHOD is ignored: even if the argument is evaluated with more range and precision than its type, it is first converted to its semantic type, and the classification is based on that: a normal long double value might become subnormal when converted to double and zero when converted tofloat.
Contents |
arg | - | floating-point value |
One ofFP_INFINITE,FP_NAN,FP_NORMAL,FP_SUBNORMAL,FP_ZERO or implementation-defined type, specifying the category ofarg.
#include <float.h>#include <math.h>#include <stdio.h> constchar* show_classification(double x){switch(fpclassify(x)){caseFP_INFINITE:return"Inf";caseFP_NAN:return"NaN";caseFP_NORMAL:return"normal";caseFP_SUBNORMAL:return"subnormal";caseFP_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));}
Output:
1.0/0.0 is Inf0.0/0.0 is NaNDBL_MIN/2 is subnormal-0.0 is zero1.0 is normal
(C99) | checks if the given number has finite value (function macro)[edit] |
(C99) | checks if the given number is infinite (function macro)[edit] |
(C99) | checks if the given number is NaN (function macro)[edit] |
(C99) | checks if the given number is normal (function macro)[edit] |
C++ documentation forfpclassify |