From 2f22a1e8dd817fecce67a8f3f8b807257960eec5 Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Mon, 25 Feb 2013 16:13:35 +0530 Subject: Format slowexp.c --- sysdeps/ieee754/dbl-64/slowexp.c | 48 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'sysdeps/ieee754/dbl-64/slowexp.c') diff --git a/sysdeps/ieee754/dbl-64/slowexp.c b/sysdeps/ieee754/dbl-64/slowexp.c index 4899af7c07..c423fc3115 100644 --- a/sysdeps/ieee754/dbl-64/slowexp.c +++ b/sysdeps/ieee754/dbl-64/slowexp.c @@ -34,32 +34,36 @@ # define SECTION #endif -void __mpexp(mp_no *x, mp_no *y, int p); +void __mpexp (mp_no *x, mp_no *y, int p); /*Converting from double precision to Multi-precision and calculating e^x */ double SECTION -__slowexp(double x) { - double w,z,res,eps=3.0e-26; +__slowexp (double x) +{ + double w, z, res, eps = 3.0e-26; int p; - mp_no mpx, mpy, mpz,mpw,mpeps,mpcor; + mp_no mpx, mpy, mpz, mpw, mpeps, mpcor; - p=6; - __dbl_mp(x,&mpx,p); /* Convert a double precision number x */ - /* into a multiple precision number mpx with prec. p. */ - __mpexp(&mpx, &mpy, p); /* Multi-Precision exponential function */ - __dbl_mp(eps,&mpeps,p); - __mul(&mpeps,&mpy,&mpcor,p); - __add(&mpy,&mpcor,&mpw,p); - __sub(&mpy,&mpcor,&mpz,p); - __mp_dbl(&mpw, &w, p); - __mp_dbl(&mpz, &z, p); - if (w == z) return w; - else { /* if calculating is not exactly */ - p = 32; - __dbl_mp(x,&mpx,p); - __mpexp(&mpx, &mpy, p); - __mp_dbl(&mpy, &res, p); - return res; - } + /* Use the multiple precision __MPEXP function to compute the exponential + First at 144 bits and if it is not accurate enough, at 768 bits. */ + p = 6; + __dbl_mp (x, &mpx, p); + __mpexp (&mpx, &mpy, p); + __dbl_mp (eps, &mpeps, p); + __mul (&mpeps, &mpy, &mpcor, p); + __add (&mpy, &mpcor, &mpw, p); + __sub (&mpy, &mpcor, &mpz, p); + __mp_dbl (&mpw, &w, p); + __mp_dbl (&mpz, &z, p); + if (w == z) + return w; + else + { + p = 32; + __dbl_mp (x, &mpx, p); + __mpexp (&mpx, &mpy, p); + __mp_dbl (&mpy, &res, p); + return res; + } } -- cgit 1.4.1