summaryrefslogtreecommitdiff
path: root/add.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2001-08-22 15:18:06 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2001-08-22 15:18:06 +0000
commit0eced588b113d6e9523d6baaee8ce280dfea5add (patch)
tree543c5eabaebec20ed8367826a502938feb69f7e0 /add.c
parent8e2077640f89ebb2ef7727f7520774382e788e1e (diff)
downloadmpfr-0eced588b113d6e9523d6baaee8ce280dfea5add.tar.gz
"mant(c) != 1/2" test was broken.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1127 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'add.c')
-rw-r--r--add.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/add.c b/add.c
index b079b2b42..e50d3162e 100644
--- a/add.c
+++ b/add.c
@@ -117,11 +117,10 @@ mpfr_add1 (a, b, c, rnd_mode, diff_exp)
/* c is not zero */
/* check whether mant(c)=1/2 or not */
- cc = *cp - (ONE<<(BITS_PER_MP_LIMB-1));
- if (cc==0) {
- bp = cp+(MPFR_PREC(c)-1)/BITS_PER_MP_LIMB;
- while (cp<bp && cc==0) cc = *++cp;
- }
+ mp_limb_t *cp2 = cp + (cn-1); /* highest limb */
+
+ cc = *cp2 - MP_LIMB_T_HIGHBIT;
+ while (cc == 0 && cp2 > cp) cc = *--cp2;
if (cc || ((ap[0] >> sh) & ONE)) goto add_one_ulp;
/* mant(c) != 1/2 or mant(c) = 1/2: add 1 iff lsb(a)=1 */