From 66bc5ada68e1971249f994505850090734ad84a9 Mon Sep 17 00:00:00 2001 From: zimmerma Date: Mon, 5 Jul 1999 09:42:20 +0000 Subject: patch for GMP bug when UDIV_NEEDS_NORMALIZATION=1 git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@276 280ebfd0-de03-0410-8827-d642c229c3f4 --- div_ui.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'div_ui.c') diff --git a/div_ui.c b/div_ui.c index 700e7d19b..17697472f 100644 --- a/div_ui.c +++ b/div_ui.c @@ -45,10 +45,18 @@ mpfr_div_ui(y, x, u, rnd_mode) if (ABSSIZE(y)>=yn+1) tmp=yp; else tmp=TMP_ALLOC((yn+1)*BYTES_PER_MP_LIMB); - if (dif>=0) - c = mpn_divrem_1(tmp, dif, xp, xn, (mp_limb_t) u); + c = (mp_limb_t) u; + if (dif>=0) { + /* patch for bug in mpn_divrem_1 */ +#if (UDIV_NEEDS_NORMALIZATION==1) + count_leading_zeros(sh, c); + c <<= sh; + EXP(y) += sh; +#endif + c = mpn_divrem_1(tmp, dif, xp, xn, c); + } else /* dif < 0 i.e. xn > yn */ - c = mpn_divrem_1(tmp, 0, xp-dif, yn, (mp_limb_t) u); + c = mpn_divrem_1(tmp, 0, xp-dif, yn, c); /* shift left to normalize */ count_leading_zeros(sh, tmp[yn]); @@ -102,3 +110,6 @@ printf("y="); mpfr_print_raw(y); putchar('\n'); } return 0; /* to prevent warning from gcc */ } + + + -- cgit v1.2.1