diff options
Diffstat (limited to 'sub.c')
-rw-r--r-- | sub.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -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 */ |