diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2013-02-13 17:19:06 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2013-02-13 17:19:07 +0530 |
commit | c2af38aa768d1c24b24ba1bed473aaee6c2d675e (patch) | |
tree | 069515d87cf0e7528940d5c169c7c392d3066c72 | |
parent | 4e92d59e26eb33c3ae523783e918a6e839e83ffd (diff) | |
download | glibc-c2af38aa768d1c24b24ba1bed473aaee6c2d675e.tar.gz glibc-c2af38aa768d1c24b24ba1bed473aaee6c2d675e.tar.xz glibc-c2af38aa768d1c24b24ba1bed473aaee6c2d675e.zip |
Remove unnecessary factorial array
kf is n! at the end of the loop, so storing the values is unnecessary.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | sysdeps/ieee754/dbl-64/mpexp.c | 13 |
2 files changed, 5 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index 07ad26f83b..ed911fa112 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2013-02-13 Siddhesh Poyarekar <siddhesh@redhat.com> + * sysdeps/ieee754/dbl-64/mpexp.c (__mpexp): Remove NFA. + * sysdeps/ieee754/dbl-64/mpexp.c (__mpexp): Faster polynomial evaluation. diff --git a/sysdeps/ieee754/dbl-64/mpexp.c b/sysdeps/ieee754/dbl-64/mpexp.c index 35c4e80b83..5b3ff04222 100644 --- a/sysdeps/ieee754/dbl-64/mpexp.c +++ b/sysdeps/ieee754/dbl-64/mpexp.c @@ -50,14 +50,6 @@ __mpexp (mp_no *x, mp_no *y, int p) 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8 }; - /* Factorials for the values of np above. */ - static const double nfa[33] = - { - 1.0, 1.0, 1.0, 1.0, 6.0, 6.0, 24.0, 24.0, 120.0, 24.0, 24.0, - 120.0, 120.0, 120.0, 720.0, 720.0, 720.0, 720.0, 720.0, 720.0, - 720.0, 720.0, 720.0, 720.0, 5040.0, 5040.0, 5040.0, 5040.0, - 40320.0, 40320.0, 40320.0, 40320.0, 40320.0 - }; static const int m1p[33] = { 0, 0, 0, 0, @@ -130,7 +122,8 @@ __mpexp (mp_no *x, mp_no *y, int p) e^x = 1 + (x * n!/1! + x^2 * n!/2! + x^3 * n!/3!) / n! = 1 + (x * (n!/1! + x * (n!/2! + x * (n!/3! + x ...)))) / n! - n! is pre-computed and saved while k! is computed on the fly. */ + k! is computed on the fly as KF and at the end of the polynomial loop, KF + is n!, which can be used directly. */ __cpy (&mps, &mpt2, p); double kf = 1.0; @@ -145,7 +138,7 @@ __mpexp (mp_no *x, mp_no *y, int p) __add (&mpt2, &mpk, &mpt1, p); __mul (&mps, &mpt1, &mpt2, p); } - __dbl_mp (nfa[p], &mpk, p); + __dbl_mp (kf, &mpk, p); __dvd (&mpt2, &mpk, &mpt1, p); __add (&mpone, &mpt1, &mpt2, p); |