From 7c6b3fb932cacabc9fa42704e134fcaf8ac0bca4 Mon Sep 17 00:00:00 2001 From: Fredrik Johansson Date: Fri, 14 Mar 2014 01:03:40 +0100 Subject: [PATCH] fix bug in mul_1x1 --- fmpr/mul_1x1.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/fmpr/mul_1x1.c b/fmpr/mul_1x1.c index 0c6cc7bb..c24715d0 100644 --- a/fmpr/mul_1x1.c +++ b/fmpr/mul_1x1.c @@ -55,6 +55,11 @@ _fmpr_mul_1x1(fmpr_t z, mp_limb_t u, const fmpz_t xexp, mp_limb_t v, the error bound must be multiplied by two */ ret -= (trail == prec); } + + if (!negative) + fmpz_set_ui(fmpr_manref(z), lo); + else + fmpz_neg_ui(fmpr_manref(z), lo); } else { @@ -94,6 +99,11 @@ _fmpr_mul_1x1(fmpr_t z, mp_limb_t u, const fmpz_t xexp, mp_limb_t v, /* special case: if the mantissa overflowed to the next power of two, the error bound must be multiplied by two */ ret -= (FLINT_BITS + trail == prec); + + if (!negative) + fmpz_set_ui(fmpr_manref(z), hi); + else + fmpz_neg_ui(fmpr_manref(z), hi); } else { @@ -110,15 +120,22 @@ _fmpr_mul_1x1(fmpr_t z, mp_limb_t u, const fmpz_t xexp, mp_limb_t v, /* special case: if the mantissa overflowed to the next power of two, the error bound must be multiplied by two */ ret -= (trail == prec); + + if (!negative) + fmpz_set_uiui(fmpr_manref(z), hi, lo); + else + fmpz_neg_uiui(fmpr_manref(z), hi, lo); } } + else + { + if (!negative) + fmpz_set_uiui(fmpr_manref(z), hi, lo); + else + fmpz_neg_uiui(fmpr_manref(z), hi, lo); + } } - if (!negative) - fmpz_set_uiui(fmpr_manref(z), hi, lo); - else - fmpz_neg_uiui(fmpr_manref(z), hi, lo); - fmpz_add2_fmpz_si_inline(fmpr_expref(z), xexp, yexp, shift); return ret; }