1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include <limits.h> #include "libm.h" #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 long double logbl(long double x) { return logb(x); } #else long double logbl(long double x) { int i = ilogbl(x); if (i == FP_ILOGB0) return -1.0/fabsl(x); if (i == FP_ILOGBNAN || i == INT_MAX) return x * x; return i; } #endif