diff options
author | Andreas Enge <andreas.enge@inria.fr> | 2012-06-30 16:09:08 +0000 |
---|---|---|
committer | Andreas Enge <andreas.enge@inria.fr> | 2012-06-30 16:09:08 +0000 |
commit | 605a73df8cc5632b1899a6a88435cde7712ea79a (patch) | |
tree | f96b76dfdcf0dc6aea96b0ec0f43d57a275ac26d | |
parent | bb3ab1f2e9608d95ff7700e20972f66338dc841d (diff) | |
download | mpc-git-605a73df8cc5632b1899a6a88435cde7712ea79a.tar.gz |
log.c: avoid mpfr_get_exp and mpfr_can_round on 0
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/mpc/trunk@1219 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r-- | src/log.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -135,6 +135,10 @@ mpc_log (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd){ mpfr_log (w, w, GMP_RNDN); /* generic error of log: (2^(- exp(w)) + 0.5) ulp */ + if (mpfr_zero_p (w)) + /* impossible to round, switch to second algorithm */ + break; + err = MPC_MAX (-mpfr_get_exp (w), 0) + 1; /* number of lost digits */ ok = mpfr_can_round (w, prec - err, GMP_RNDN, GMP_RNDZ, |