From da9f4c660a6e1161ec94f8e7bd799b3146fb9690 Mon Sep 17 00:00:00 2001 From: vlefevre Date: Wed, 25 Mar 2020 20:04:16 +0000 Subject: [src/sub1.c] Fixed underflow handling in case c small (can occur only with UBF). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@13814 280ebfd0-de03-0410-8827-d642c229c3f4 --- src/sub1.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sub1.c b/src/sub1.c index 1e9fd72ae..69a2871e1 100644 --- a/src/sub1.c +++ b/src/sub1.c @@ -210,7 +210,13 @@ mpfr_sub1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode) if (MPFR_UNLIKELY (exp_a > __gmpfr_emax)) return mpfr_overflow (a, rnd_mode, MPFR_SIGN (a)); if (MPFR_UNLIKELY (exp_a < __gmpfr_emin)) - goto underflow; + { + if (rnd_mode == MPFR_RNDN && + (exp_a < __gmpfr_emin - 1 || + (inexact * MPFR_INT_SIGN (a) >= 0 && mpfr_powerof2_raw (a)))) + rnd_mode = MPFR_RNDZ; + return mpfr_underflow (a, rnd_mode, MPFR_SIGN(a)); + } MPFR_SET_EXP (a, exp_a); MPFR_RET (inexact); } -- cgit v1.2.1