summaryrefslogtreecommitdiffstats
path: root/lib/msun/src
diff options
context:
space:
mode:
Diffstat (limited to 'lib/msun/src')
-rw-r--r--lib/msun/src/k_tanf.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/lib/msun/src/k_tanf.c b/lib/msun/src/k_tanf.c
index 8e19309..e7b816d 100644
--- a/lib/msun/src/k_tanf.c
+++ b/lib/msun/src/k_tanf.c
@@ -22,20 +22,14 @@ static const float
one = 1.0000000000e+00, /* 0x3f800000 */
pio4 = 7.8539812565e-01, /* 0x3f490fda */
pio4lo= 3.7748947079e-08, /* 0x33222168 */
+/* Bounds for tan(x)/x - t(x): ~[-1.73e-09, 1.724e-09]. */
T[] = {
- 3.3333334327e-01, /* 0x3eaaaaab */
- 1.3333334029e-01, /* 0x3e088889 */
- 5.3968254477e-02, /* 0x3d5d0dd1 */
- 2.1869488060e-02, /* 0x3cb327a4 */
- 8.8632395491e-03, /* 0x3c11371f */
- 3.5920790397e-03, /* 0x3b6b6916 */
- 1.4562094584e-03, /* 0x3abede48 */
- 5.8804126456e-04, /* 0x3a1a26c8 */
- 2.4646313977e-04, /* 0x398137b9 */
- 7.8179444245e-05, /* 0x38a3f445 */
- 7.1407252108e-05, /* 0x3895c07a */
- -1.8558637748e-05, /* 0xb79bae5f */
- 2.5907305826e-05, /* 0x37d95384 */
+ 0xaaaaa3.0p-25, /* 0.33333310485 */
+ 0x888b06.0p-26, /* 0.13334283238 */
+ 0xdc84c8.0p-28, /* 0.053837567568 */
+ 0xb9d8f1.0p-29, /* 0.022686453536 */
+ 0xcfe632.0p-31, /* 0.0063445800915 */
+ 0xeaf97e.0p-31, /* 0.0071708550677 */
};
float
@@ -54,11 +48,11 @@ __kernel_tanf(float x, float y, int iy)
z = x*x;
w = z*z;
/* Break x^5*(T[1]+x^2*T[2]+...) into
- * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) +
- * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12]))
+ * x^5*(T[1]+x^4*T[3]+x^8*T[5]) +
+ * x^5*(x^2*(T[2]+x^4*T[4]))
*/
- r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11]))));
- v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12])))));
+ r = T[1]+w*(T[3]+w*T[5]);
+ v = z*(T[2]+w*T[4]);
s = z*x;
r = y + z*(s*(r+v)+y);
r += T[0]*s;
OpenPOWER on IntegriCloud