diff options
Diffstat (limited to 'lib/libm')
| -rw-r--r-- | lib/libm/nearbyintf.c | 21 | ||||
| -rw-r--r-- | lib/libm/sf_ldexp.c | 2 |
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/libm/nearbyintf.c b/lib/libm/nearbyintf.c new file mode 100644 index 000000000..1c3545945 --- /dev/null +++ b/lib/libm/nearbyintf.c @@ -0,0 +1,21 @@ +// adapted from the rintf() function from musl-1.1.16 + +#include "libm.h" + +float nearbyintf(float x) +{ + union {float f; uint32_t i;} u = {x}; + int e = u.i>>23 & 0xff; + int s = u.i>>31; + float_t y; + + if (e >= 0x7f+23) + return x; + if (s) + y = x - 0x1p23f + 0x1p23f; + else + y = x + 0x1p23f - 0x1p23f; + if (y == 0) + return s ? -0.0f : 0.0f; + return y; +} diff --git a/lib/libm/sf_ldexp.c b/lib/libm/sf_ldexp.c index 32a134eea..a0941df9f 100644 --- a/lib/libm/sf_ldexp.c +++ b/lib/libm/sf_ldexp.c @@ -32,7 +32,7 @@ float value; int exp; #endif { - if(!finitef(value)||value==(float)0.0) return value; + if(!isfinite(value)||value==(float)0.0) return value; value = scalbnf(value,exp); //if(!finitef(value)||value==(float)0.0) errno = ERANGE; return value; |
