summaryrefslogtreecommitdiff
path: root/exp3.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2005-10-29 21:07:36 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2005-10-29 21:07:36 +0000
commit81d0fe7e5bf08752226da35688d6fdc4b86dd024 (patch)
tree930748f7cb3d0508ad7aca6e42e2409e57b593e8 /exp3.c
parentcf41545c0627ff4f6b7ffac190ecd2c8ab604937 (diff)
downloadmpfr-81d0fe7e5bf08752226da35688d6fdc4b86dd024.tar.gz
patched root.c to use rootrem.c with gmp-4.1.90
added comment in exp3.c added more initial guard bits in agm git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3909 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'exp3.c')
-rw-r--r--exp3.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/exp3.c b/exp3.c
index 63d2f8e9d..f8b341f49 100644
--- a/exp3.c
+++ b/exp3.c
@@ -24,6 +24,7 @@ MA 02110-1301, USA. */
#define MPFR_NEED_LONGLONG_H
#include "mpfr-impl.h"
+/* y <- exp(p/2^r), using 2^m terms from the series */
static void
mpfr_exp_rational (mpfr_ptr y, mpz_ptr p, long r, int m,
mpz_t *P, mp_prec_t *mult)
@@ -34,7 +35,7 @@ mpfr_exp_rational (mpfr_ptr y, mpz_ptr p, long r, int m,
mp_exp_t diff, expo;
mp_prec_t precy = MPFR_PREC(y), prec_i_have, accu;
int k, l;
-
+
MPFR_ASSERTN ((size_t) m < sizeof (long) * CHAR_BIT - 1);
S = P + (m+1);
@@ -82,12 +83,12 @@ mpfr_exp_rational (mpfr_ptr y, mpz_ptr p, long r, int m,
{
mpz_mul (S[k], S[k], ptoj[l]);
mpz_mul (S[k-1], S[k-1], P[k]);
- mpz_mul_2exp (S[k-1], S[k-1], r <<l);
+ mpz_mul_2exp (S[k-1], S[k-1], r << l);
mpz_add (S[k-1], S[k-1], S[k]);
mpz_mul (P[k-1], P[k-1], P[k]);
nb_terms[k-1] += nb_terms[k];
MPFR_MPZ_SIZEINBASE2 (prec_i_have, P[k]);
- mult[k] = mult[k-1] + ((r >> 2) << l )+ prec_i_have - 1;
+ mult[k] = mult[k-1] + ((r >> 2) << l ) + prec_i_have - 1;
prec_i_have = mult[k];
/* since mult[k] >= mult[k-1] + nbits(P[k]),
we have P[0]*...*P[k] <= 2^mult[k] = 2^prec_i_have */
@@ -151,7 +152,7 @@ mpfr_exp_3 (mpfr_ptr y, mpfr_srcptr x, mp_rnd_t rnd_mode)
int iter;
int inexact = 0;
MPFR_ZIV_DECL (ziv_loop);
-
+
/* decompose x */
/* we first write x = 1.xxxxxxxxxxxxx
----- k bits -- */
@@ -201,8 +202,8 @@ mpfr_exp_3 (mpfr_ptr y, mpfr_srcptr x, mp_rnd_t rnd_mode)
MPFR_ASSERTD (mpz_cmp_ui (uk, 0) != 0);
mpfr_exp_rational (tmp, uk, shift + twopoweri - ttt, k + 1, P, mult);
for (loop = 0; loop < shift; loop++)
- mpfr_mul (tmp, tmp, tmp, GMP_RNDD);
- twopoweri *=2;
+ mpfr_sqr (tmp, tmp, GMP_RNDD);
+ twopoweri *= 2;
/* General case */
iter = (k <= prec_x) ? k : prec_x;