summaryrefslogtreecommitdiff
path: root/li2.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2009-10-13 06:37:15 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2009-10-13 06:37:15 +0000
commit27b6d7edab02ec27ef3ccf36b7ba1c2b4920c85c (patch)
tree2875d2e730541ab836539d140a540c65421ae024 /li2.c
parentc36b71dfaf2b70aa2c958657ee3746eb0bc49bd9 (diff)
downloadmpfr-27b6d7edab02ec27ef3ccf36b7ba1c2b4920c85c.tar.gz
[li2.c] fixed bug when x is near 0
[tli2.c] added new test git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@6512 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'li2.c')
-rw-r--r--li2.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/li2.c b/li2.c
index 4f0fa54a4..b65d6ab25 100644
--- a/li2.c
+++ b/li2.c
@@ -276,6 +276,8 @@ mpfr_li2 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
{
mpfr_ui_sub (u, 1, x, MPFR_RNDN);
mpfr_log (u, u, MPFR_RNDU);
+ if (MPFR_IS_ZERO(u))
+ goto next_m;
mpfr_neg (u, u, MPFR_RNDN); /* u = -log(1-x) */
expo_l = MPFR_GET_EXP (u);
k = li2_series (s, u, MPFR_RNDU);
@@ -292,6 +294,7 @@ mpfr_li2 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
if (MPFR_CAN_ROUND (s, (mp_exp_t) m - err, yp, rnd_mode))
break;
+ next_m:
MPFR_ZIV_NEXT (loop, m);
mpfr_set_prec (u, m);
mpfr_set_prec (s, m);