62 static partial class fdlibm
64 static double __kernel_tan(
double x,
double y,
int iy)
67 one = 1.00000000000000000000e+00,
68 pio4 = 7.85398163397448278999e-01,
69 pio4lo = 3.06161699786838301793e-17,
71 3.33333333333334091986e-01,
73 1.33333333333201242699e-01,
75 5.39682539762260521377e-02,
77 2.18694882948595424599e-02,
79 8.86323982359930005737e-03,
81 3.59207910759131235356e-03,
83 1.45620945432529025516e-03,
85 5.88041240820264096874e-04,
87 2.46463134818469906812e-04,
89 7.81794442939557092300e-05,
91 7.14072491382608190305e-05,
93 -1.85586374855275456654e-05,
95 2.59073051863633712884e-05;
100 ix = hx & 0x7fffffff;
105 if (((ix | __LO(x)) | (iy + 1)) == 0)
106 return one / fabs(x);
121 return t + a * (s + t * v);
126 if (ix >= 0x3FE59428)
128 if (hx < 0) { x = -x; y = -y; }
139 r = T_1_ + w * (T_3_ + w * (T_5_ + w * (T_7_ + w * (T_9_ + w * T_11_))));
140 v = z * (T_2_ + w * (T_4_ + w * (T_6_ + w * (T_8_ + w * (T_10_ + w * T_12_)))));
142 r = y + z * (s * (r + v) + y);
145 if (ix >= 0x3FE59428)
148 return (
double)(1 - ((hx >> 30) & 2)) * (v - 2.0 * (x - (w * w / (w + v) - r)));
150 if (iy == 1)
return w;
162 return t + a * (s + t * v);