diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-03-13 02:01:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-03-13 02:01:34 +0000 |
commit | ca58f1dbeb62840dad345d6bfcca18c81db130a8 (patch) | |
tree | eb1b9705fc324e0852875514dda109641e9399de /sysdeps/ieee754/dbl-64/slowpow.c | |
parent | 9a656848eaa2f9c96ce438eeb3c63e33933c0b2e (diff) | |
download | glibc-ca58f1dbeb62840dad345d6bfcca18c81db130a8.tar.gz glibc-ca58f1dbeb62840dad345d6bfcca18c81db130a8.tar.xz glibc-ca58f1dbeb62840dad345d6bfcca18c81db130a8.zip |
Update.
2001-03-12 Ulrich Drepper <drepper@redhat.com> * sysdeps/ieee754/dbl-64/e_remainder.c: Fix handling of boundary conditions. * sysdeps/ieee754/dbl-64/e_pow.c: Fix handling of boundary conditions. * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Handle Inf and NaN correctly. (__cos): Likewise. * sysdeps/ieee754/dbl-64/e_asin.c (__ieee754_asin): Handle NaN correctly. (__ieee754_acos): Likewise. redefinition. * sysdeps/ieee754/dbl-64/endian.h: Define also one of BIG_ENDI and LITTLE_ENDI. * sysdeps/ieee754/dbl-64/MathLib.h (Init_Lib): Use void as parameter list.
Diffstat (limited to 'sysdeps/ieee754/dbl-64/slowpow.c')
-rw-r--r-- | sysdeps/ieee754/dbl-64/slowpow.c | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c index 11da7e43d9..3412197aef 100644 --- a/sysdeps/ieee754/dbl-64/slowpow.c +++ b/sysdeps/ieee754/dbl-64/slowpow.c @@ -34,40 +34,40 @@ #include "mpa.h" -void mpexp(mp_no *x, mp_no *y, int p); -void mplog(mp_no *x, mp_no *y, int p); +void __mpexp(mp_no *x, mp_no *y, int p); +void __mplog(mp_no *x, mp_no *y, int p); double ulog(double); -double halfulp(double x,double y); +double __halfulp(double x,double y); -double slowpow(double x, double y, double z) { +double __slowpow(double x, double y, double z) { double res,res1; mp_no mpx, mpy, mpz,mpw,mpp,mpr,mpr1; static const mp_no eps = {-3,{1.0,4.0}}; int p; - res = halfulp(x,y); /* halfulp() returns -10 or x^y */ + res = __halfulp(x,y); /* halfulp() returns -10 or x^y */ if (res >= 0) return res; /* if result was really computed by halfulp */ /* else, if result was not really computed by halfulp */ p = 10; /* p=precision */ - dbl_mp(x,&mpx,p); - dbl_mp(y,&mpy,p); - dbl_mp(z,&mpz,p); - mplog(&mpx, &mpz, p); /* log(x) = z */ - mul(&mpy,&mpz,&mpw,p); /* y * z =w */ - mpexp(&mpw, &mpp, p); /* e^w =pp */ - add(&mpp,&eps,&mpr,p); /* pp+eps =r */ + __dbl_mp(x,&mpx,p); + __dbl_mp(y,&mpy,p); + __dbl_mp(z,&mpz,p); + __mplog(&mpx, &mpz, p); /* log(x) = z */ + __mul(&mpy,&mpz,&mpw,p); /* y * z =w */ + __mpexp(&mpw, &mpp, p); /* e^w =pp */ + __add(&mpp,&eps,&mpr,p); /* pp+eps =r */ __mp_dbl(&mpr, &res, p); - sub(&mpp,&eps,&mpr1,p); /* pp -eps =r1 */ + __sub(&mpp,&eps,&mpr1,p); /* pp -eps =r1 */ __mp_dbl(&mpr1, &res1, p); /* converting into double precision */ if (res == res1) return res; p = 32; /* if we get here result wasn't calculated exactly, continue */ - dbl_mp(x,&mpx,p); /* for more exact calculation */ - dbl_mp(y,&mpy,p); - dbl_mp(z,&mpz,p); - mplog(&mpx, &mpz, p); /* log(c)=z */ - mul(&mpy,&mpz,&mpw,p); /* y*z =w */ - mpexp(&mpw, &mpp, p); /* e^w=pp */ + __dbl_mp(x,&mpx,p); /* for more exact calculation */ + __dbl_mp(y,&mpy,p); + __dbl_mp(z,&mpz,p); + __mplog(&mpx, &mpz, p); /* log(c)=z */ + __mul(&mpy,&mpz,&mpw,p); /* y*z =w */ + __mpexp(&mpw, &mpp, p); /* e^w=pp */ __mp_dbl(&mpp, &res, p); /* converting into double precision */ return res; } |