]>
git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/ieee754/dbl-64/s_tan.c
09db096d056a440fcc770d0227537fa7d1469f3d
2 * IBM Accurate Mathematical Library
3 * written by International Business Machines Corp.
4 * Copyright (C) 2001-2013 Free Software Foundation, Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
19 /*********************************************************************/
20 /* MODULE_NAME: utan.c */
25 /* FILES NEEDED:dla.h endian.h mpa.h mydefs.h utan.h */
26 /* branred.c sincos32.c mptan.c */
29 /* An ultimate tan routine. Given an IEEE double machine number x */
30 /* it computes the correctly rounded (to nearest) value of tan(x). */
31 /* Assumption: Machine arithmetic operations are performed in */
32 /* round to nearest mode of IEEE 754 standard. */
34 /*********************************************************************/
42 #include <math_private.h>
44 #include <stap-probe.h>
50 static double tanMp (double);
51 void __mptan (double, mp_no
*, int);
61 double a
, da
, a2
, b
, db
, c
, dc
, c1
, cc1
, c2
, cc2
, c3
, cc3
, fi
, ffi
, gi
, pz
,
62 s
, sy
, t
, t1
, t2
, t3
, t4
, t7
, t8
, t9
, t10
, w
, x2
, xn
, xx2
, y
, ya
,
63 yya
, z0
, z
, zz
, z2
, zz2
;
69 mp_no mpa
, mpt1
, mpt2
;
73 int __branred (double, double *, double *);
74 int __mpranred (double, mp_no
*, int);
76 SET_RESTORE_ROUND_53BIT (FE_TONEAREST
);
80 ux
= num
.i
[HIGH_HALF
];
81 if ((ux
& 0x7ff00000) == 0x7ff00000)
83 if ((ux
& 0x7fffffff) == 0x7ff00000)
89 w
= (x
< 0.0) ? -x
: x
;
91 /* (I) The case abs(x) <= 1.259e-8 */
98 /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
104 t2
= d9
.d
+ x2
* d11
.d
;
110 if ((y
= x
+ (t2
- u1
.d
* t2
)) == x
+ (t2
+ u1
.d
* t2
))
117 c1
= a25
.d
+ x2
* a27
.d
;
118 c1
= a23
.d
+ x2
* c1
;
119 c1
= a21
.d
+ x2
* c1
;
120 c1
= a19
.d
+ x2
* c1
;
121 c1
= a17
.d
+ x2
* c1
;
122 c1
= a15
.d
+ x2
* c1
;
125 EMULV (x
, x
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
);
126 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
127 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
128 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
129 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
130 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
131 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
132 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
133 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
134 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
135 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
136 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
137 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
138 MUL2 (x
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
139 ADD2 (x
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
140 if ((y
= c1
+ (cc1
- u2
.d
* c1
)) == c1
+ (cc1
+ u2
.d
* c1
))
149 /* (III) The case 0.0608 < abs(x) <= 0.787 */
153 i
= ((int) (mfftnhf
.d
+ TWO8
* w
));
156 s
= (x
< 0.0) ? -1 : 1;
157 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
160 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
161 if ((y
= fi
+ (t2
- fi
* u3
.d
)) == fi
+ (t2
+ fi
* u3
.d
))
166 t3
= (t2
< 0.0) ? -t2
: t2
;
167 t4
= fi
* ua3
.d
+ t3
* ub3
.d
;
168 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
176 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
177 EMULV (z
, z
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
);
178 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
179 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
180 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
181 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
182 MUL2 (z
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
183 ADD2 (z
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
185 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
186 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
187 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
188 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
191 if ((y
= c3
+ (cc3
- u4
.d
* c3
)) == c3
+ (cc3
+ u4
.d
* c3
))
200 /* (---) The case 0.787 < abs(x) <= 25 */
203 /* Range reduction by algorithm i */
204 t
= (x
* hpinv
.d
+ toint
.d
);
207 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
208 n
= v
.i
[LOW_HALF
] & 0x00000001;
225 /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
232 /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
236 t2
= d9
.d
+ a2
* d11
.d
;
240 t2
= da
+ a
* a2
* t2
;
244 /* First stage -cot */
246 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
248 if ((y
= c
+ (dc
- u6
.d
* c
)) == c
+ (dc
+ u6
.d
* c
))
256 /* First stage tan */
257 if ((y
= a
+ (t2
- u5
.d
* a
)) == a
+ (t2
+ u5
.d
* a
))
264 /* Range reduction by algorithm ii */
265 t
= (x
* hpinv
.d
+ toint
.d
);
268 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
269 n
= v
.i
[LOW_HALF
] & 0x00000001;
275 da
= ((t
- a
) - t1
) + da
;
278 EADD (a
, da
, t1
, t2
);
281 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
283 c1
= a25
.d
+ x2
* a27
.d
;
284 c1
= a23
.d
+ x2
* c1
;
285 c1
= a21
.d
+ x2
* c1
;
286 c1
= a19
.d
+ x2
* c1
;
287 c1
= a17
.d
+ x2
* c1
;
288 c1
= a15
.d
+ x2
* c1
;
291 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
292 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
293 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
294 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
295 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
296 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
297 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
298 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
299 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
300 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
301 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
302 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
303 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
304 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
308 /* Second stage -cot */
309 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
311 if ((y
= c2
+ (cc2
- u8
.d
* c2
)) == c2
+ (cc2
+ u8
.d
* c2
))
319 /* Second stage tan */
320 if ((y
= c1
+ (cc1
- u7
.d
* c1
)) == c1
+ (cc1
+ u7
.d
* c1
))
330 /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
333 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
334 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
336 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
343 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
344 if ((y
= gi
- (t2
- gi
* u10
.d
)) == gi
- (t2
+ gi
* u10
.d
))
349 t3
= (t2
< 0.0) ? -t2
: t2
;
350 t4
= gi
* ua10
.d
+ t3
* ub10
.d
;
351 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
360 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
361 if ((y
= fi
+ (t2
- fi
* u9
.d
)) == fi
+ (t2
+ fi
* u9
.d
))
366 t3
= (t2
< 0.0) ? -t2
: t2
;
367 t4
= fi
* ua9
.d
+ t3
* ub9
.d
;
368 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
377 EADD (z0
, yya
, z
, zz
)
378 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
379 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
380 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
381 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
382 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
383 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
384 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
385 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
387 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
388 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
389 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
394 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
396 if ((y
= c3
+ (cc3
- u12
.d
* c3
)) == c3
+ (cc3
+ u12
.d
* c3
))
405 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
407 if ((y
= c3
+ (cc3
- u11
.d
* c3
)) == c3
+ (cc3
+ u11
.d
* c3
))
418 /* (---) The case 25 < abs(x) <= 1e8 */
421 /* Range reduction by algorithm ii */
422 t
= (x
* hpinv
.d
+ toint
.d
);
425 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
426 n
= v
.i
[LOW_HALF
] & 0x00000001;
432 da
= ((t
- a
) - t1
) + da
;
433 EADD (a
, da
, t1
, t2
);
449 /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
456 /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
460 t2
= d9
.d
+ a2
* d11
.d
;
464 t2
= da
+ a
* a2
* t2
;
468 /* First stage -cot */
470 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
472 if ((y
= c
+ (dc
- u14
.d
* c
)) == c
+ (dc
+ u14
.d
* c
))
480 /* First stage tan */
481 if ((y
= a
+ (t2
- u13
.d
* a
)) == a
+ (t2
+ u13
.d
* a
))
489 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
490 c1
= a25
.d
+ x2
* a27
.d
;
491 c1
= a23
.d
+ x2
* c1
;
492 c1
= a21
.d
+ x2
* c1
;
493 c1
= a19
.d
+ x2
* c1
;
494 c1
= a17
.d
+ x2
* c1
;
495 c1
= a15
.d
+ x2
* c1
;
498 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
499 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
500 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
501 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
502 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
503 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
504 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
505 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
506 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
507 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
508 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
509 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
510 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
511 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
515 /* Second stage -cot */
516 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
518 if ((y
= c2
+ (cc2
- u16
.d
* c2
)) == c2
+ (cc2
+ u16
.d
* c2
))
526 /* Second stage tan */
527 if ((y
= c1
+ (cc1
- u15
.d
* c1
)) == c1
+ (cc1
+ u15
.d
* c1
))
537 /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
539 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
540 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
542 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
549 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
550 if ((y
= gi
- (t2
- gi
* u18
.d
)) == gi
- (t2
+ gi
* u18
.d
))
555 t3
= (t2
< 0.0) ? -t2
: t2
;
556 t4
= gi
* ua18
.d
+ t3
* ub18
.d
;
557 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
566 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
567 if ((y
= fi
+ (t2
- fi
* u17
.d
)) == fi
+ (t2
+ fi
* u17
.d
))
572 t3
= (t2
< 0.0) ? -t2
: t2
;
573 t4
= fi
* ua17
.d
+ t3
* ub17
.d
;
574 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
583 EADD (z0
, yya
, z
, zz
);
584 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
585 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
586 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
587 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
588 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
589 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
590 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
591 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
593 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
594 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
595 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
600 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
602 if ((y
= c3
+ (cc3
- u20
.d
* c3
)) == c3
+ (cc3
+ u20
.d
* c3
))
611 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
613 if ((y
= c3
+ (cc3
- u19
.d
* c3
)) == c3
+ (cc3
+ u19
.d
* c3
))
623 /* (---) The case 1e8 < abs(x) < 2**1024 */
624 /* Range reduction by algorithm iii */
625 n
= (__branred (x
, &a
, &da
)) & 0x00000001;
626 EADD (a
, da
, t1
, t2
);
642 /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
649 /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
653 t2
= d9
.d
+ a2
* d11
.d
;
657 t2
= da
+ a
* a2
* t2
;
660 /* First stage -cot */
662 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
664 if ((y
= c
+ (dc
- u22
.d
* c
)) == c
+ (dc
+ u22
.d
* c
))
672 /* First stage tan */
673 if ((y
= a
+ (t2
- u21
.d
* a
)) == a
+ (t2
+ u21
.d
* a
))
681 /* Reduction by algorithm iv */
683 n
= (__mpranred (x
, &mpa
, p
)) & 0x00000001;
684 __mp_dbl (&mpa
, &a
, p
);
685 __dbl_mp (a
, &mpt1
, p
);
686 __sub (&mpa
, &mpt1
, &mpt2
, p
);
687 __mp_dbl (&mpt2
, &da
, p
);
689 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
691 c1
= a25
.d
+ x2
* a27
.d
;
692 c1
= a23
.d
+ x2
* c1
;
693 c1
= a21
.d
+ x2
* c1
;
694 c1
= a19
.d
+ x2
* c1
;
695 c1
= a17
.d
+ x2
* c1
;
696 c1
= a15
.d
+ x2
* c1
;
699 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
700 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
701 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
702 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
703 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
704 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
705 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
706 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
707 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
708 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
709 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
710 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
711 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
712 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
716 /* Second stage -cot */
717 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
719 if ((y
= c2
+ (cc2
- u24
.d
* c2
)) == c2
+ (cc2
+ u24
.d
* c2
))
727 /* Second stage tan */
728 if ((y
= c1
+ (cc1
- u23
.d
* c1
)) == c1
+ (cc1
+ u23
.d
* c1
))
738 /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
740 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
741 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
743 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
750 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
751 if ((y
= gi
- (t2
- gi
* u26
.d
)) == gi
- (t2
+ gi
* u26
.d
))
756 t3
= (t2
< 0.0) ? -t2
: t2
;
757 t4
= gi
* ua26
.d
+ t3
* ub26
.d
;
758 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
767 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
768 if ((y
= fi
+ (t2
- fi
* u25
.d
)) == fi
+ (t2
+ fi
* u25
.d
))
773 t3
= (t2
< 0.0) ? -t2
: t2
;
774 t4
= fi
* ua25
.d
+ t3
* ub25
.d
;
775 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
784 EADD (z0
, yya
, z
, zz
);
785 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
786 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
787 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
788 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
789 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
790 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
791 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
792 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
794 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
795 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
796 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
801 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
803 if ((y
= c3
+ (cc3
- u28
.d
* c3
)) == c3
+ (cc3
+ u28
.d
* c3
))
812 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
814 if ((y
= c3
+ (cc3
- u27
.d
* c3
)) == c3
+ (cc3
+ u27
.d
* c3
))
827 /* multiple precision stage */
828 /* Convert x to multi precision number,compute tan(x) by mptan() routine */
829 /* and converts result back to double */
838 __mptan (x
, &mpy
, p
);
839 __mp_dbl (&mpy
, &y
, p
);
840 LIBC_PROBE (slowtan
, 2, &x
, &y
);
844 #ifdef NO_LONG_DOUBLE
845 weak_alias (tan
, tanl
)