summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2020-03-23 15:38:06 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2020-03-23 15:38:06 +0000
commite4adaf82533039109881b3db5823ce0daf810a96 (patch)
treef05d30286cbcc72381e9aa812016e5346caded06
parentfd5d3140011f0503c614b411a2e90c28c169092d (diff)
downloadmpfr-e4adaf82533039109881b3db5823ce0daf810a96.tar.gz
[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
-rw-r--r--src/add1.c2
-rw-r--r--src/mpfr-impl.h6
-rw-r--r--src/sub1.c3
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",