diff options
Diffstat (limited to 'src/math/logb.c')
-rw-r--r-- | src/math/logb.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/math/logb.c b/src/math/logb.c new file mode 100644 index 00000000..f7cd7613 --- /dev/null +++ b/src/math/logb.c @@ -0,0 +1,20 @@ +#include <limits.h> +#include "libm.h" + +/* +special cases: + logb(+-0) = -inf + logb(+-inf) = +inf + logb(nan) = nan +these are calculated at runtime to raise fp exceptions +*/ + +double logb(double x) { + int i = ilogb(x); + + if (i == FP_ILOGB0) + return -1.0/fabs(x); + if (i == FP_ILOGBNAN || i == INT_MAX) + return x * x; + return i; +} |