From a21a393b37daf7a3ffa83a92f2ec40e36851e5f7 Mon Sep 17 00:00:00 2001 From: enge Date: Sat, 30 Jun 2012 13:41:48 +0000 Subject: log.c: use abs instead of norm to work around intermediate under- and overflow git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@1211 211d60ee-9f03-0410-a15a-8952a2c7a4e4 --- src/log.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/log.c b/src/log.c index 8c13164..0af4b4e 100644 --- a/src/log.c +++ b/src/log.c @@ -141,16 +141,12 @@ do { \ prec += mpc_ceil_log2 (prec) + 4; mpfr_set_prec (w, prec); - /* w is rounded down */ - mpc_norm (w, op, GMP_RNDN); + mpc_abs (w, op, GMP_RNDN); /* error 0.5 ulp */ - if (mpfr_inf_p (w) || mpfr_zero_p (w)) - /* intermediate over- or underflow; the logarithm may be representable */ - break; + MPC_ASSERT (!mpfr_inf_p (w) && !mpfr_zero_p (w)); mpfr_log (w, w, GMP_RNDN); /* generic error of log: (2^(- exp(w)) + 0.5) ulp */ - mpfr_div_2ui (w, w, 1, GMP_RNDN); err = MPC_MAX (-mpfr_get_exp (w), 0) + 1; /* number of lost digits */ -- cgit v1.2.1