summaryrefslogtreecommitdiff
path: root/acos.c
diff options
context:
space:
mode:
authorpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2005-02-14 10:10:51 +0000
committerpelissip <pelissip@280ebfd0-de03-0410-8827-d642c229c3f4>2005-02-14 10:10:51 +0000
commit5d7f915cd5ac5427b9dcdd49443fd7d2b41ca37d (patch)
tree2aac1d1e9115ff5ccfddd175fe2f7cd502d26754 /acos.c
parentd6e0bd5a6bf47fdd47ca5efc698bec6c96faa2f0 (diff)
downloadmpfr-5d7f915cd5ac5427b9dcdd49443fd7d2b41ca37d.tar.gz
Add ZivLoop controler.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3295 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'acos.c')
-rw-r--r--acos.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/acos.c b/acos.c
index d163bd146..dd5857e5a 100644
--- a/acos.c
+++ b/acos.c
@@ -29,6 +29,7 @@ mpfr_acos (mpfr_ptr acos, mpfr_srcptr x, mp_rnd_t rnd_mode)
mp_prec_t prec;
int sign, compared, inexact;
MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
/* Singular cases */
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
@@ -93,6 +94,7 @@ mpfr_acos (mpfr_ptr acos, mpfr_srcptr x, mp_rnd_t rnd_mode)
mpfr_init2 (tmp, prec);
mpfr_init2 (arcc, prec);
+ MPFR_ZIV_INIT (loop, prec);
for (;;)
{
/* acos(x) = Pi/2 - asin(x) = Pi/2 - atan(x/sqrt(1-x^2)) */
@@ -108,10 +110,11 @@ mpfr_acos (mpfr_ptr acos, mpfr_srcptr x, mp_rnd_t rnd_mode)
if (mpfr_can_round (arcc, prec-supplement, GMP_RNDN, GMP_RNDZ,
MPFR_PREC (acos) + (rnd_mode == GMP_RNDN)))
break;
- prec += BITS_PER_MP_LIMB;
+ MPFR_ZIV_NEXT (loop, prec);
mpfr_set_prec (tmp, prec);
mpfr_set_prec (arcc, prec);
}
+ MPFR_ZIV_FREE (loop);
inexact = mpfr_set (acos, arcc, rnd_mode);
mpfr_clear (tmp);