macro/function
<cmath> <ctgmath>
fpclassify
| function | 
int fpclassify (float x);
int fpclassify (double x);
int fpclassify (long double x);
 | 
|---|
 
 
Classify floating-point value
Returns a value of type int that matches one of the classification macro constants, depending on the value of x:
| value | description | 
|---|
| FP_INFINITE | Positive or negative infinity (overflow) | 
| FP_NAN | Not-A-Number | 
| FP_ZERO | Value of zero | 
| FP_SUBNORMAL | Sub-normal value (underflow) | 
| FP_NORMAL | Normal value (none of the above) | 
Note that each value pertains to a single category: zero is not a normal value.
These macro constants of type int are defined in header <cmath> (<math.h>).
In C, this is implemented as a macro, but the type of x shall be float, double or long double.
 
Parameters
- xThe value to classify.
Return value
One of the follwoing int values: FP_INFINITE, FP_NAN, FP_ZERO, FP_SUBNORMAL or FP_NORMAL.
Example
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | /* fpclassify example */
#include <stdio.h>      /* printf */
#include <math.h>       /* fpclassify, signbit, FP_* */
int main()
{
  double d = 1.0 / 0.0;
  switch (fpclassify(d)) {
    case FP_INFINITE:  printf ("infinite");  break;
    case FP_NAN:       printf ("NaN");       break;
    case FP_ZERO:      printf ("zero");      break;
    case FP_SUBNORMAL: printf ("subnormal"); break;
    case FP_NORMAL:    printf ("normal");    break;
  }
  if (signbit(d)) printf (" negative\n");
  else printf (" positive or unsigned\n");
  return 0;
}
 | 
Output:
| 
infinitive positive or unsigned
 | 
See also
- isfinite
- Is finite value (macro
)
- isnan
- Is Not-A-Number (macro/function
)
- isnormal
- Is normal (macro/function
)
- signbit
- Sign bit (macro/function
)