<cmath> (math.h)

macro/function
<cmath> <ctgmath>

fpclassify

macro
fpclassify(x)
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:

valuedescription
FP_INFINITEPositive or negative infinity (overflow)
FP_NANNot-A-Number
FP_ZEROValue of zero
FP_SUBNORMALSub-normal value (underflow)
FP_NORMALNormal 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.
In C++, it is implemented with function overloads for each floating-point type.

Parameters

x
The value to classify.

Return value

One of the followoing int values: FP_INFINITE, FP_NAN, FP_ZERO, FP_SUBNORMAL or FP_NORMAL.

Example

1
2
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:

infinite positive or unsigned

See also