#include #include #include #define classification(x) (fpclassify(x) == FP_INFINITE ? "Inf" : \ fpclassify(x) == FP_NAN ? "NaN" : \ fpclassify(x) == FP_NORMAL ? "normal" : \ fpclassify(x) == FP_SUBNORMAL ? "sub-normal" : \ fpclassify(x) == FP_ZERO ? "zero" : \ "unknown") #define MYPRINT(fmt, exp) { printf("%s: " fmt "\n", #exp, (exp)); } int main() { MYPRINT("%s", classification(1.0)); MYPRINT("%d", signbit(1.0)); MYPRINT("%s", classification(0.0)); MYPRINT("%d", signbit(0.0)); MYPRINT("%d", isnan(0.0)); MYPRINT("%s", classification(-0.0)); MYPRINT("%d", signbit(-0.0)); MYPRINT("%s", classification(-0.0/10)); MYPRINT("%d", signbit(-0.0/10)); MYPRINT("%s", classification(1.0/0.0)); MYPRINT("%d", signbit(1.0/0.0)); MYPRINT("%d", isnan(1.0/0.0)); MYPRINT("%s", classification(-1.0/0.0)); MYPRINT("%d", signbit(-1.0/0.0)); MYPRINT("%s", classification(0.0/0.0)); MYPRINT("%d", isnan(0.0/0.0)); MYPRINT("%s", classification(DBL_MAX)); MYPRINT("%s", classification(DBL_MAX*2)); MYPRINT("%s", classification(DBL_MIN)); MYPRINT("%s", classification(DBL_MIN/2)); MYPRINT("%s", classification(FLT_MIN/2)); MYPRINT("%s", classification(FLT_MIN/2.0)); return 0; }