diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-16 08:23:06 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-16 08:23:06 +0000 |
commit | a6711183c166d3fee6a49e158dee338662daf1ed (patch) | |
tree | a6b3f42ed074a30009b4735ce20aa62cad091d42 /src/sub1sp.c | |
parent | 81cc3a3273a3a21fded5c47e90acbb029ff08063 (diff) | |
download | mpfr-a6711183c166d3fee6a49e158dee338662daf1ed.tar.gz |
[src/sub1sp.c] fixed bug20180216
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@12260 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/sub1sp.c')
-rw-r--r-- | src/sub1sp.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/sub1sp.c b/src/sub1sp.c index 6b9943f91..d13066e23 100644 --- a/src/sub1sp.c +++ b/src/sub1sp.c @@ -1643,11 +1643,9 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) /* We don't have anymore a valid Cp+1! But since B-C >= 2^p+1, the final sub can't unnormalize */ } - MPFR_ASSERTD( !(ap[0] & ~mask) ); - - /* if {ap, n} is a power of 2 and rb <> 0, we subtract 1 */ - if (MPFR_UNLIKELY(MPFR_LIMB_MSB(ap[n-1]) == MPFR_LIMB_HIGHBIT && - mpfr_powerof2_raw (a))) + /* if {ap, n} is a power of 2 and rb <> 0, we can subtract 1 */ + else if (rb && MPFR_UNLIKELY(MPFR_LIMB_MSB(ap[n-1]) == MPFR_LIMB_HIGHBIT + && mpfr_powerof2_raw (a))) { mpn_sub_1 (ap, ap, n, MPFR_LIMB_ONE << sh); ap[n-1] |= MPFR_LIMB_HIGHBIT; @@ -1655,6 +1653,7 @@ mpfr_sub1sp (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) rb = rbb; sb = sbb; } + MPFR_ASSERTD( !(ap[0] & ~mask) ); /* Rounding */ if (MPFR_LIKELY(rnd_mode == MPFR_RNDF)) |