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