1570af302Sopenharmony_ci#include <math.h> 2570af302Sopenharmony_ci 3570af302Sopenharmony_ci/* 4570af302Sopenharmony_cispecial cases: 5570af302Sopenharmony_ci logb(+-0) = -inf, and raise divbyzero 6570af302Sopenharmony_ci logb(+-inf) = +inf 7570af302Sopenharmony_ci logb(nan) = nan 8570af302Sopenharmony_ci*/ 9570af302Sopenharmony_ci 10570af302Sopenharmony_cidouble logb(double x) 11570af302Sopenharmony_ci{ 12570af302Sopenharmony_ci if (!isfinite(x)) 13570af302Sopenharmony_ci return x * x; 14570af302Sopenharmony_ci if (x == 0) 15570af302Sopenharmony_ci return -1/(x*x); 16570af302Sopenharmony_ci return ilogb(x); 17570af302Sopenharmony_ci} 18