summaryrefslogtreecommitdiff
path: root/src/sub1sp.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-02-16 08:23:06 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-02-16 08:23:06 +0000
commita6711183c166d3fee6a49e158dee338662daf1ed (patch)
treea6b3f42ed074a30009b4735ce20aa62cad091d42 /src/sub1sp.c
parent81cc3a3273a3a21fded5c47e90acbb029ff08063 (diff)
downloadmpfr-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.c9
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))