diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2001-10-26 08:40:13 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2001-10-26 08:40:13 +0000 |
commit | 6250934d37869d1286facc72cf3ebf2dd5532fdf (patch) | |
tree | cc3ef6d4fd590535339572c5f13784abf35685ab /ui_div.c | |
parent | 7a1d903eaeb1cbf018fa58ef171d8d709d68ff2f (diff) | |
download | mpfr-6250934d37869d1286facc72cf3ebf2dd5532fdf.tar.gz |
implemented ternary flag in mpfr_ui_div
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1400 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'ui_div.c')
-rw-r--r-- | ui_div.c | 43 |
1 files changed, 27 insertions, 16 deletions
@@ -26,7 +26,7 @@ MA 02111-1307, USA. */ #include "mpfr.h" #include "mpfr-impl.h" -void +int #if __STDC__ mpfr_ui_div (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) #else @@ -44,31 +44,42 @@ mpfr_ui_div (y, u, x, rnd_mode) if (MPFR_IS_NAN(x)) { MPFR_SET_NAN(y); - return; + MPFR_RET_NAN; } MPFR_CLEAR_NAN(y); - if (MPFR_IS_INF(x)) + if (MPFR_IS_INF(x)) /* u/Inf = 0 */ { MPFR_CLEAR_INF(y); MPFR_SET_ZERO(y); - if (MPFR_SIGN(x) != MPFR_SIGN(y)) MPFR_CHANGE_SIGN(y); - return; + if (MPFR_SIGN(x) != MPFR_SIGN(y)) + MPFR_CHANGE_SIGN(y); + MPFR_RET(0); } MPFR_CLEAR_INF(y); - if (u) { - MPFR_INIT1(up, uu, BITS_PER_MP_LIMB, 1); - count_leading_zeros(cnt, (mp_limb_t) u); - *up = (mp_limb_t) u << cnt; - MPFR_EXP(uu) = BITS_PER_MP_LIMB-cnt; + if (u) + { + MPFR_INIT1(up, uu, BITS_PER_MP_LIMB, 1); + count_leading_zeros(cnt, (mp_limb_t) u); + *up = (mp_limb_t) u << cnt; + MPFR_EXP(uu) = BITS_PER_MP_LIMB-cnt; - mpfr_div(y, uu, x, rnd_mode); - } - else { - if (MPFR_IS_ZERO(x)) MPFR_SET_NAN(y); /* 0/0 */ - else MPFR_SET_ZERO(y); /* if u=0, then set y to 0 */ - } + return mpfr_div (y, uu, x, rnd_mode); + } + else /* u = 0 */ + { + if (MPFR_IS_ZERO(x)) /* 0/0 */ + { + MPFR_SET_NAN(y); + MPFR_RET_NAN; + } + else + { + MPFR_SET_ZERO(y); /* if u=0, then set y to 0 */ + MPFR_RET(0); + } + } } |