mirror of https://git.musl-libc.org/git/musl
3 changed files with 17 additions and 25 deletions
@ -1,20 +1,17 @@ |
|||||
#include <limits.h> |
|
||||
#include "libm.h" |
#include "libm.h" |
||||
|
|
||||
/*
|
/*
|
||||
special cases: |
special cases: |
||||
logb(+-0) = -inf |
logb(+-0) = -inf, and raise divbyzero |
||||
logb(+-inf) = +inf |
logb(+-inf) = +inf |
||||
logb(nan) = nan |
logb(nan) = nan |
||||
these are calculated at runtime to raise fp exceptions |
|
||||
*/ |
*/ |
||||
|
|
||||
double logb(double x) { |
double logb(double x) |
||||
int i = ilogb(x); |
{ |
||||
|
if (!isfinite(x)) |
||||
if (i == FP_ILOGB0) |
|
||||
return -1.0/fabs(x); |
|
||||
if (i == FP_ILOGBNAN || i == INT_MAX) |
|
||||
return x * x; |
return x * x; |
||||
return i; |
if (x == 0) |
||||
|
return -1/(x+0); |
||||
|
return ilogb(x); |
||||
} |
} |
||||
|
|||||
@ -1,12 +1,10 @@ |
|||||
#include <limits.h> |
|
||||
#include "libm.h" |
#include "libm.h" |
||||
|
|
||||
float logbf(float x) { |
float logbf(float x) |
||||
int i = ilogbf(x); |
{ |
||||
|
if (!isfinite(x)) |
||||
if (i == FP_ILOGB0) |
|
||||
return -1.0f/fabsf(x); |
|
||||
if (i == FP_ILOGBNAN || i == INT_MAX) |
|
||||
return x * x; |
return x * x; |
||||
return i; |
if (x == 0) |
||||
|
return -1/(x+0); |
||||
|
return ilogbf(x); |
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue