summaryrefslogtreecommitdiff
path: root/tanh.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2005-02-10 15:43:41 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2005-02-10 15:43:41 +0000
commit667b2763ad6e7b02174303e6646e49f37e80a677 (patch)
tree820dfe4fc5f18fec632e9ee60ada8d3add40b89b /tanh.c
parenta9c75f5b66a8b6379b0c8d4782949ba935cb86c8 (diff)
downloadmpfr-667b2763ad6e7b02174303e6646e49f37e80a677.tar.gz
Add log for other functions.
Add ZivLoop too. Cleanup exp3. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3290 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tanh.c')
-rw-r--r--tanh.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/tanh.c b/tanh.c
index 72206f01a..84e092f93 100644
--- a/tanh.c
+++ b/tanh.c
@@ -52,6 +52,8 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
}
}
+ MPFR_LOG_BEGIN (("x[%#R]=%R rnd_mode=%d", x, x, rnd_mode));
+
MPFR_SAVE_EXPO_MARK (expo);
MPFR_TMP_INIT_ABS (x, xt);
@@ -66,7 +68,8 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
mp_prec_t Ny = MPFR_PREC(y); /* Precision of output variable */
mp_prec_t Nt; /* Precision of intermediary variables */
long int err; /* Precision of error */
-
+ MPFR_ZIV_DECL (loop);
+
/* Compute the precision of intermediary variable */
Nt = MAX (Nx, Ny);
@@ -76,7 +79,8 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
/* initialise of intermediary variable */
mpfr_init2 (t, Nt);
mpfr_init2 (te, Nt);
-
+
+ MPFR_ZIV_INIT (loop, Nt);
if (MPFR_GET_EXP (x) > 10)
for (;;) {
/* tanh(x)=1-2/(exp(2x)+1) */
@@ -88,7 +92,7 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
d = MPFR_GET_EXP (t);
mpfr_ui_sub (t, 1, t, GMP_RNDZ); /*1-2/(exp(2x)+1) */
- /* Calculation of the error*/
+ /* Calculation of the error */
/* err (t) <= (1+8*2^(d-EXP(t)))*ulp(t) */
d = d - MPFR_GET_EXP (t);
err = Nt - MAX (d + 4, 1);
@@ -98,7 +102,7 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
break;
/* Actualisation of the precision */
- Nt += BITS_PER_MP_LIMB;
+ MPFR_ZIV_NEXT (loop, Nt);
mpfr_set_prec (t, Nt);
mpfr_set_prec (te, Nt);
}
@@ -121,16 +125,19 @@ mpfr_tanh (mpfr_ptr y, mpfr_srcptr xt , mp_rnd_t rnd_mode)
break;
/* Actualisation of the precision */
- Nt += BITS_PER_MP_LIMB;
+ MPFR_ZIV_NEXT (loop, Nt);
mpfr_set_prec (t, Nt);
mpfr_set_prec (te, Nt);
}
-
+ MPFR_ZIV_FREE (loop);
inexact = mpfr_set4 (y, t, rnd_mode, MPFR_SIGN (xt));
mpfr_clear (te);
mpfr_clear (t);
}
MPFR_SAVE_EXPO_FREE (expo);
- return mpfr_check_range (y, inexact, rnd_mode);
+ inexact = mpfr_check_range (y, inexact, rnd_mode);
+
+ MPFR_LOG_END (("y[%#R]=%R inexact=%d", y, y, inexact));
+ return inexact;
}