1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include <math.h> /* special cases: logb(+-0) = -inf, and raise divbyzero logb(+-inf) = +inf logb(nan) = nan */ double logb(double x) { if (!isfinite(x)) return x * x; if (x == 0) return -1/(x*x); return ilogb(x); }