#pragma once #define MAX(a, b) \ ({ __typeof__ (a) _a = (a); \ __typeof__ (b) _b = (b); \ _a > _b ? _a : _b; }) #define MIN(a, b) \ ({ __typeof__ (a) _a = (a); \ __typeof__ (b) _b = (b); \ _a < _b ? _a : _b; }) #define FP_NAN 0 #define FP_INFINITE 1 #define FP_ZERO 2 #define FP_SUBNORMAL 3 #define FP_NORMAL 4 int __fpclassify(double); int __fpclassifyf(float); int __fpclassifyl(long double); static inline unsigned __FLOAT_BITS(float __f) { union { float __f; unsigned __i; } __u; __u.__f = __f; return __u.__i; } static inline unsigned long long __DOUBLE_BITS(double __f) { union { double __f; unsigned long long __i; } __u; __u.__f = __f; return __u.__i; } #define isfinite(x) ( \ sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) < 0x7f800000 : \ sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) < 0x7ffULL<<52 : \ __fpclassifyl(x) > FP_INFINITE) int __signbit(double); int __signbitf(float); int __signbitl(long double); #define signbit(x) ( \ sizeof(x) == sizeof(float) ? (int)(__FLOAT_BITS(x)>>31) : \ sizeof(x) == sizeof(double) ? (int)(__DOUBLE_BITS(x)>>63) : \ __signbitl(x) ) long double frexpl(long double x, int *e);