diff options
author | Ori Bernstein <ori@eigenstate.org> | 2021-01-23 20:03:07 -0800 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2021-01-23 20:03:07 -0800 |
commit | f76e28cb71fd7f45eda35f68c89a6ba151625313 (patch) | |
tree | e5bc61d6723fb84b87e3f3111dc3820b13768910 /sys/src/ape/lib/ap/math/modf.c | |
parent | 988bdd05a326687daa1852c9ff395230743b30d8 (diff) |
ape/libm: add back fmod, remove modf
We removed the wrong file. Put it back.
Diffstat (limited to 'sys/src/ape/lib/ap/math/modf.c')
-rw-r--r-- | sys/src/ape/lib/ap/math/modf.c | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/sys/src/ape/lib/ap/math/modf.c b/sys/src/ape/lib/ap/math/modf.c deleted file mode 100644 index 4326cf44a..000000000 --- a/sys/src/ape/lib/ap/math/modf.c +++ /dev/null @@ -1,53 +0,0 @@ -#include <math.h> -#include <errno.h> - -/* modf suitable for IEEE double-precision */ - -#define MASK 0x7ffL -#define SIGN 0x80000000 -#define SHIFT 20 -#define BIAS 1022L - -typedef union -{ - double d; - struct - { - long ms; - long ls; - } i; -} Cheat; - -double -modf(double d, double *ip) -{ - Cheat x; - int e; - - if(-1 < d && d < 1) { - *ip = 0; - return d; - } - x.d = d; - x.i.ms &= ~SIGN; - e = (x.i.ms >> SHIFT) & MASK; - if(e == MASK || e == 0){ - errno = EDOM; - *ip = (d > 0)? HUGE_VAL : -HUGE_VAL; - return 0; - } - e -= BIAS; - if(e <= SHIFT+1) { - x.i.ms &= ~(0x1fffffL >> e); - x.i.ls = 0; - } else - if(e <= SHIFT+33) - x.i.ls &= ~(0x7fffffffL >> (e-SHIFT-2)); - if(d > 0){ - *ip = x.d; - return d - x.d; - }else{ - *ip = -x.d; - return d + x.d; - } -} |