logb.c 327 B

1234567891011121314151617181920
  1. #include <limits.h>
  2. #include "libm.h"
  3. /*
  4. special cases:
  5. logb(+-0) = -inf
  6. logb(+-inf) = +inf
  7. logb(nan) = nan
  8. these are calculated at runtime to raise fp exceptions
  9. */
  10. double logb(double x) {
  11. int i = ilogb(x);
  12. if (i == FP_ILOGB0)
  13. return -1.0/fabs(x);
  14. if (i == FP_ILOGBNAN || i == INT_MAX)
  15. return x * x;
  16. return i;
  17. }