summaryrefslogtreecommitdiff
path: root/src/const_pi.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2014-01-29 00:17:08 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2014-01-29 00:17:08 +0000
commit4db80414146fcc8f60a7fec23fbc37f3d2d119aa (patch)
tree96f7996e8c22e19d780bc29314975c6935ae5e42 /src/const_pi.c
parentf6cac6e32efdfe41d57641d13eac796f1d5c2451 (diff)
downloadmpfr-4db80414146fcc8f60a7fec23fbc37f3d2d119aa.tar.gz
[src/const_pi.c] Use of GROUP allocation and minor optimization
(modified patch by Patrick PĂ©lissier). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@8909 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/const_pi.c')
-rw-r--r--src/const_pi.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/src/const_pi.c b/src/const_pi.c
index 2bb411af2..bf293ba7c 100644
--- a/src/const_pi.c
+++ b/src/const_pi.c
@@ -44,6 +44,7 @@ mpfr_const_pi_internal (mpfr_ptr x, mpfr_rnd_t rnd_mode)
{
mpfr_t a, A, B, D, S;
mpfr_prec_t px, p, cancel, k, kmax;
+ MPFR_GROUP_DECL (group);
MPFR_ZIV_DECL (loop);
int inex;
@@ -58,11 +59,7 @@ mpfr_const_pi_internal (mpfr_ptr x, mpfr_rnd_t rnd_mode)
p = px + 3 * kmax + 14; /* guarantees no recomputation for px <= 10000 */
- mpfr_init2 (a, p);
- mpfr_init2 (A, p);
- mpfr_init2 (B, p);
- mpfr_init2 (D, p);
- mpfr_init2 (S, p);
+ MPFR_GROUP_INIT_5 (group, p, a, A, B, D, S);
MPFR_ZIV_INIT (loop, p);
for (;;) {
@@ -87,8 +84,8 @@ mpfr_const_pi_internal (mpfr_ptr x, mpfr_rnd_t rnd_mode)
mpfr_sub (Bp, Ap, S, MPFR_RNDN); /* -1/4 <= Bp <= 3/4 */
mpfr_mul_2ui (Bp, Bp, 1, MPFR_RNDN); /* -1/2 <= Bp <= 3/2 */
mpfr_sub (S, Ap, Bp, MPFR_RNDN);
- MPFR_ASSERTN (mpfr_cmp_ui (S, 1) < 0);
- cancel = mpfr_cmp_ui (S, 0) ? (mpfr_uexp_t) -mpfr_get_exp(S) : p;
+ MPFR_ASSERTD (mpfr_cmp_ui (S, 1) < 0);
+ cancel = MPFR_NOTZERO (S) ? (mpfr_uexp_t) -mpfr_get_exp(S) : p;
/* MPFR_ASSERTN (cancel >= px || cancel >= 9 * (1 << k) - 4); */
mpfr_mul_2ui (S, S, k, MPFR_RNDN);
mpfr_sub (D, D, S, MPFR_RNDN);
@@ -109,20 +106,12 @@ mpfr_const_pi_internal (mpfr_ptr x, mpfr_rnd_t rnd_mode)
p += kmax;
MPFR_ZIV_NEXT (loop, p);
- mpfr_set_prec (a, p);
- mpfr_set_prec (A, p);
- mpfr_set_prec (B, p);
- mpfr_set_prec (D, p);
- mpfr_set_prec (S, p);
+ MPFR_GROUP_REPREC_5 (group, p, a, A, B, D, S);
}
MPFR_ZIV_FREE (loop);
inex = mpfr_set (x, A, rnd_mode);
- mpfr_clear (a);
- mpfr_clear (A);
- mpfr_clear (B);
- mpfr_clear (D);
- mpfr_clear (S);
+ MPFR_GROUP_CLEAR (group);
return inex;
}