diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-09-25 19:07:18 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-09-25 19:07:18 +0000 |
commit | c7a58c2edadb8fce84ab2f8b129a87eb19bdc485 (patch) | |
tree | b0ce15fb6eb16bbfe34612a21ffc16709d397b33 /libm/s_remquo.c | |
parent | c8d8b6d30a29b353637cd1c7379402bff2481b79 (diff) |
- add some more math functions (patch from gentoo/solar)
Diffstat (limited to 'libm/s_remquo.c')
-rw-r--r-- | libm/s_remquo.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libm/s_remquo.c b/libm/s_remquo.c new file mode 100644 index 000000000..18853e211 --- /dev/null +++ b/libm/s_remquo.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include "math.h" +#include "math_private.h" + +libm_hidden_proto(remquo) +#ifdef __STDC__ + double remquo(double x, double y, int *quo) /* wrapper remquo */ +#else + double remquo(x,y,quo) /* wrapper remquo */ + double x,y; + int *quo; +#endif +{ + int signx, signy, signres; + int mswx; + int mswy; + double x_over_y; + + GET_HIGH_WORD(mswx, x); + GET_HIGH_WORD(mswy, y); + + signx = (mswx & 0x80000000) >> 31; + signy = (mswy & 0x80000000) >> 31; + + signres = (signx ^ signy) ? -1 : 1; + + x_over_y = fabs(x / y); + + *quo = signres * (lrint(x_over_y) & 0x7f); + + return remainder(x,y); +} +libm_hidden_def(remquo) |