summaryrefslogtreecommitdiff
path: root/sub.c
diff options
context:
space:
mode:
Diffstat (limited to 'sub.c')
-rw-r--r--sub.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sub.c b/sub.c
index 043a7acb6..7f07e27d1 100644
--- a/sub.c
+++ b/sub.c
@@ -331,13 +331,13 @@ mpfr_sub1(a, b, c, rnd_mode, diff_exp)
kc--;
cc -= mpn_sub_1(&c2, bp+(--k), 1, (cp[kc]>>dif) +
(cp[kc+1]<<(mp_bits_per_limb-dif)));
- if (cc==0 || cc==-1) cc=c2;
+ if (cc==0 || (~cc==0 && ~c2==0)) cc=c2;
}
- if ((cc==0 || cc==-1) && kc==0) {
+ if ((cc==0 || (~cc==0)) && kc==0) {
/* it still remains cp[0]<<(mp_bits_per_limb-dif) */
if (k!=0) cc -= mpn_sub_1(&c2, bp+(--k), 1,
cp[0]<<(mp_bits_per_limb-dif));
- else cc -= cp[0]<<(mp_bits_per_limb-dif);
+ else if (cp[0]<<(mp_bits_per_limb-dif)) cc--;
}
if ((long)cc>0) goto add_one_ulp;
else if ((long)cc<-1) goto end_of_sub; /* carry can be at most 1 */