#include <math.h>
#include <stdint.h>
#include <stdio.h>

void classify(double d)
{
 int class = fpclassify(d);

 switch (class) {
  case(FP_NAN): printf("FP_NAN\n"); break;
  case(FP_INFINITE): printf("FP_INFINITE\n"); break;
  case(FP_ZERO): printf("FP_ZERO\n"); break;
  case(FP_SUBNORMAL): printf("FP_SUBNORMAL\n"); break;
  case(FP_NORMAL): printf("FP_NORMAL\n"); break;
 }
}

int main(void)
{
 union {double d; uint64_t l;} val;

 classify(0.0);
 classify(-0.0);
 classify(1.7976931348623157e+308);
 classify(5e-324);
 val.l = 0x7ff8000000000000L;
 classify(val.d);
 val.l = 0x7ff0000000000000L;
 classify(val.d);
 val.l = 0x7ff80000L;
 classify(val.d);
 val.l = 0x7ff00000L;
 classify(val.d);
 val.d = -0.0;
 printf("hex -0.0=%llx\n", val.l);

 return 0;
}
