From e4adaf82533039109881b3db5823ce0daf810a96 Mon Sep 17 00:00:00 2001 From: vlefevre Date: Mon, 23 Mar 2020 15:38:06 +0000 Subject: [src] * mpfr-impl.h: define MPFR_UBF_GET_EXP macro. * add1.c, sub1.c: use this macro. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@13799 280ebfd0-de03-0410-8827-d642c229c3f4 --- src/add1.c | 2 +- src/mpfr-impl.h | 6 ++++++ src/sub1.c | 3 +-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/add1.c b/src/add1.c index b3811cfa9..6e0a33fc3 100644 --- a/src/add1.c +++ b/src/add1.c @@ -41,7 +41,7 @@ mpfr_add1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) if (MPFR_UNLIKELY (MPFR_IS_UBF (b))) { - exp = mpfr_ubf_zexp2exp (MPFR_ZEXP (b)); + exp = MPFR_UBF_GET_EXP (b); if (exp > __gmpfr_emax) return mpfr_overflow (a, rnd_mode, MPFR_SIGN (b));; } diff --git a/src/mpfr-impl.h b/src/mpfr-impl.h index dcc586487..c98f6ab38 100644 --- a/src/mpfr-impl.h +++ b/src/mpfr-impl.h @@ -2594,6 +2594,12 @@ __MPFR_DECLSPEC mpfr_exp_t mpfr_ubf_diff_exp (mpfr_srcptr, mpfr_srcptr); ((void) (x)->_mpfr_exp, \ ((mpfr_ubf_ptr) (x))->_mpfr_zexp) +/* Like MPFR_GET_EXP, but accepts UBF (with exponent saturated to + the interval [MPFR_EXP_MIN,MPFR_EXP_MAX]). */ +#define MPFR_UBF_GET_EXP(x) \ + (MPFR_IS_UBF (x) ? mpfr_ubf_zexp2exp (MPFR_ZEXP (x)) : \ + MPFR_GET_EXP ((mpfr_ptr) (x))) + /* If x is a UBF, clear its mpz_t exponent. */ #define MPFR_UBF_CLEAR_EXP(x) \ ((void) (MPFR_IS_UBF (x) && (mpz_clear (MPFR_ZEXP (x)), 0))) diff --git a/src/sub1.c b/src/sub1.c index 41deef381..78458a0db 100644 --- a/src/sub1.c +++ b/src/sub1.c @@ -95,8 +95,7 @@ mpfr_sub1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) if (MPFR_UNLIKELY (MPFR_IS_UBF (b) || MPFR_IS_UBF (c))) { - exp_b = MPFR_IS_UBF (b) ? - mpfr_ubf_zexp2exp (MPFR_ZEXP (b)) : MPFR_GET_EXP (b); + exp_b = MPFR_UBF_GET_EXP (b); diff_exp = mpfr_ubf_diff_exp (b, c); MPFR_LOG_MSG (("UBF: exp_b=%" MPFR_EXP_FSPEC "d%s " "diff_exp=%" MPFR_EXP_FSPEC "d%s\n", -- cgit v1.2.1