]>
git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/ieee754/dbl-64/s_tan.c
2 * IBM Accurate Mathematical Library
3 * written by International Business Machines Corp.
4 * Copyright (C) 2001-2019 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 <https://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 /*********************************************************************/
43 #include <math_private.h>
44 #include <fenv_private.h>
45 #include <math-underflow.h>
46 #include <libm-alias-double.h>
48 #include <stap-probe.h>
54 static double tanMp (double);
55 void __mptan (double, mp_no
*, int);
65 double a
, da
, a2
, b
, db
, c
, dc
, c1
, cc1
, c2
, cc2
, c3
, cc3
, fi
, ffi
, gi
, pz
,
66 s
, sy
, t
, t1
, t2
, t3
, t4
, t7
, t8
, t9
, t10
, w
, x2
, xn
, xx2
, y
, ya
,
67 yya
, z0
, z
, zz
, z2
, zz2
;
73 mp_no mpa
, mpt1
, mpt2
;
77 int __branred (double, double *, double *);
78 int __mpranred (double, mp_no
*, int);
80 SET_RESTORE_ROUND_53BIT (FE_TONEAREST
);
84 ux
= num
.i
[HIGH_HALF
];
85 if ((ux
& 0x7ff00000) == 0x7ff00000)
87 if ((ux
& 0x7fffffff) == 0x7ff00000)
93 w
= (x
< 0.0) ? -x
: x
;
95 /* (I) The case abs(x) <= 1.259e-8 */
98 math_check_force_underflow_nonneg (w
);
103 /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
109 t2
= d9
.d
+ x2
* d11
.d
;
115 if ((y
= x
+ (t2
- u1
.d
* t2
)) == x
+ (t2
+ u1
.d
* t2
))
122 c1
= a25
.d
+ x2
* a27
.d
;
123 c1
= a23
.d
+ x2
* c1
;
124 c1
= a21
.d
+ x2
* c1
;
125 c1
= a19
.d
+ x2
* c1
;
126 c1
= a17
.d
+ x2
* c1
;
127 c1
= a15
.d
+ x2
* c1
;
130 EMULV (x
, x
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
);
131 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
132 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
133 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
134 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
135 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
136 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
137 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
138 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
139 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
140 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
141 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
142 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
143 MUL2 (x
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
144 ADD2 (x
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
145 if ((y
= c1
+ (cc1
- u2
.d
* c1
)) == c1
+ (cc1
+ u2
.d
* c1
))
154 /* (III) The case 0.0608 < abs(x) <= 0.787 */
158 i
= ((int) (mfftnhf
.d
+ TWO8
* w
));
161 s
= (x
< 0.0) ? -1 : 1;
162 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
165 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
166 if ((y
= fi
+ (t2
- fi
* u3
.d
)) == fi
+ (t2
+ fi
* u3
.d
))
171 t3
= (t2
< 0.0) ? -t2
: t2
;
172 t4
= fi
* ua3
.d
+ t3
* ub3
.d
;
173 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
181 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
182 EMULV (z
, z
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
);
183 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
184 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
185 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
186 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
187 MUL2 (z
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
188 ADD2 (z
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
190 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
191 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
192 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
193 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
196 if ((y
= c3
+ (cc3
- u4
.d
* c3
)) == c3
+ (cc3
+ u4
.d
* c3
))
205 /* (---) The case 0.787 < abs(x) <= 25 */
208 /* Range reduction by algorithm i */
209 t
= (x
* hpinv
.d
+ toint
.d
);
212 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
213 n
= v
.i
[LOW_HALF
] & 0x00000001;
230 /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
237 /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
241 t2
= d9
.d
+ a2
* d11
.d
;
245 t2
= da
+ a
* a2
* t2
;
249 /* First stage -cot */
251 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
253 if ((y
= c
+ (dc
- u6
.d
* c
)) == c
+ (dc
+ u6
.d
* c
))
261 /* First stage tan */
262 if ((y
= a
+ (t2
- u5
.d
* a
)) == a
+ (t2
+ u5
.d
* a
))
269 /* Range reduction by algorithm ii */
270 t
= (x
* hpinv
.d
+ toint
.d
);
273 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
274 n
= v
.i
[LOW_HALF
] & 0x00000001;
280 da
= ((t
- a
) - t1
) + da
;
283 EADD (a
, da
, t1
, t2
);
286 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
288 c1
= a25
.d
+ x2
* a27
.d
;
289 c1
= a23
.d
+ x2
* c1
;
290 c1
= a21
.d
+ x2
* c1
;
291 c1
= a19
.d
+ x2
* c1
;
292 c1
= a17
.d
+ x2
* c1
;
293 c1
= a15
.d
+ x2
* c1
;
296 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
297 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
298 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
299 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
300 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
301 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
302 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
303 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
304 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
305 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
306 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
307 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
308 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
309 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
313 /* Second stage -cot */
314 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
316 if ((y
= c2
+ (cc2
- u8
.d
* c2
)) == c2
+ (cc2
+ u8
.d
* c2
))
324 /* Second stage tan */
325 if ((y
= c1
+ (cc1
- u7
.d
* c1
)) == c1
+ (cc1
+ u7
.d
* c1
))
335 /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
338 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
339 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
341 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
348 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
349 if ((y
= gi
- (t2
- gi
* u10
.d
)) == gi
- (t2
+ gi
* u10
.d
))
354 t3
= (t2
< 0.0) ? -t2
: t2
;
355 t4
= gi
* ua10
.d
+ t3
* ub10
.d
;
356 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
365 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
366 if ((y
= fi
+ (t2
- fi
* u9
.d
)) == fi
+ (t2
+ fi
* u9
.d
))
371 t3
= (t2
< 0.0) ? -t2
: t2
;
372 t4
= fi
* ua9
.d
+ t3
* ub9
.d
;
373 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
382 EADD (z0
, yya
, z
, zz
)
383 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
384 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
385 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
386 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
387 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
388 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
389 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
390 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
392 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
393 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
394 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
399 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
401 if ((y
= c3
+ (cc3
- u12
.d
* c3
)) == c3
+ (cc3
+ u12
.d
* c3
))
410 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
412 if ((y
= c3
+ (cc3
- u11
.d
* c3
)) == c3
+ (cc3
+ u11
.d
* c3
))
423 /* (---) The case 25 < abs(x) <= 1e8 */
426 /* Range reduction by algorithm ii */
427 t
= (x
* hpinv
.d
+ toint
.d
);
430 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
431 n
= v
.i
[LOW_HALF
] & 0x00000001;
437 da
= ((t
- a
) - t1
) + da
;
438 EADD (a
, da
, t1
, t2
);
454 /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
461 /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
465 t2
= d9
.d
+ a2
* d11
.d
;
469 t2
= da
+ a
* a2
* t2
;
473 /* First stage -cot */
475 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
477 if ((y
= c
+ (dc
- u14
.d
* c
)) == c
+ (dc
+ u14
.d
* c
))
485 /* First stage tan */
486 if ((y
= a
+ (t2
- u13
.d
* a
)) == a
+ (t2
+ u13
.d
* a
))
494 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
495 c1
= a25
.d
+ x2
* a27
.d
;
496 c1
= a23
.d
+ x2
* c1
;
497 c1
= a21
.d
+ x2
* c1
;
498 c1
= a19
.d
+ x2
* c1
;
499 c1
= a17
.d
+ x2
* c1
;
500 c1
= a15
.d
+ x2
* c1
;
503 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
504 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
505 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
506 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
507 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
508 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
509 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
510 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
511 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
512 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
513 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
514 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
515 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
516 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
520 /* Second stage -cot */
521 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
523 if ((y
= c2
+ (cc2
- u16
.d
* c2
)) == c2
+ (cc2
+ u16
.d
* c2
))
531 /* Second stage tan */
532 if ((y
= c1
+ (cc1
- u15
.d
* c1
)) == c1
+ (cc1
+ u15
.d
* c1
))
542 /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
544 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
545 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
547 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
554 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
555 if ((y
= gi
- (t2
- gi
* u18
.d
)) == gi
- (t2
+ gi
* u18
.d
))
560 t3
= (t2
< 0.0) ? -t2
: t2
;
561 t4
= gi
* ua18
.d
+ t3
* ub18
.d
;
562 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
571 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
572 if ((y
= fi
+ (t2
- fi
* u17
.d
)) == fi
+ (t2
+ fi
* u17
.d
))
577 t3
= (t2
< 0.0) ? -t2
: t2
;
578 t4
= fi
* ua17
.d
+ t3
* ub17
.d
;
579 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
588 EADD (z0
, yya
, z
, zz
);
589 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
590 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
591 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
592 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
593 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
594 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
595 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
596 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
598 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
599 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
600 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
605 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
607 if ((y
= c3
+ (cc3
- u20
.d
* c3
)) == c3
+ (cc3
+ u20
.d
* c3
))
616 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
618 if ((y
= c3
+ (cc3
- u19
.d
* c3
)) == c3
+ (cc3
+ u19
.d
* c3
))
628 /* (---) The case 1e8 < abs(x) < 2**1024 */
629 /* Range reduction by algorithm iii */
630 n
= (__branred (x
, &a
, &da
)) & 0x00000001;
631 EADD (a
, da
, t1
, t2
);
647 /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
654 /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
658 t2
= d9
.d
+ a2
* d11
.d
;
662 t2
= da
+ a
* a2
* t2
;
665 /* First stage -cot */
667 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
669 if ((y
= c
+ (dc
- u22
.d
* c
)) == c
+ (dc
+ u22
.d
* c
))
677 /* First stage tan */
678 if ((y
= a
+ (t2
- u21
.d
* a
)) == a
+ (t2
+ u21
.d
* a
))
686 /* Reduction by algorithm iv */
688 n
= (__mpranred (x
, &mpa
, p
)) & 0x00000001;
689 __mp_dbl (&mpa
, &a
, p
);
690 __dbl_mp (a
, &mpt1
, p
);
691 __sub (&mpa
, &mpt1
, &mpt2
, p
);
692 __mp_dbl (&mpt2
, &da
, p
);
694 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
696 c1
= a25
.d
+ x2
* a27
.d
;
697 c1
= a23
.d
+ x2
* c1
;
698 c1
= a21
.d
+ x2
* c1
;
699 c1
= a19
.d
+ x2
* c1
;
700 c1
= a17
.d
+ x2
* c1
;
701 c1
= a15
.d
+ x2
* c1
;
704 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
705 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
706 ADD2 (a11
.d
, aa11
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
707 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
708 ADD2 (a9
.d
, aa9
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
709 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
710 ADD2 (a7
.d
, aa7
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
711 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
712 ADD2 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
713 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
714 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
715 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
716 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
717 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
721 /* Second stage -cot */
722 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
724 if ((y
= c2
+ (cc2
- u24
.d
* c2
)) == c2
+ (cc2
+ u24
.d
* c2
))
732 /* Second stage tan */
733 if ((y
= c1
+ (cc1
- u23
.d
* c1
)) == c1
+ (cc1
+ u23
.d
* c1
))
743 /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
745 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
746 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
748 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
755 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
756 if ((y
= gi
- (t2
- gi
* u26
.d
)) == gi
- (t2
+ gi
* u26
.d
))
761 t3
= (t2
< 0.0) ? -t2
: t2
;
762 t4
= gi
* ua26
.d
+ t3
* ub26
.d
;
763 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
772 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
773 if ((y
= fi
+ (t2
- fi
* u25
.d
)) == fi
+ (t2
+ fi
* u25
.d
))
778 t3
= (t2
< 0.0) ? -t2
: t2
;
779 t4
= fi
* ua25
.d
+ t3
* ub25
.d
;
780 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
789 EADD (z0
, yya
, z
, zz
);
790 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
791 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
792 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
793 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
794 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
795 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
796 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
797 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
799 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
800 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
801 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
806 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
808 if ((y
= c3
+ (cc3
- u28
.d
* c3
)) == c3
+ (cc3
+ u28
.d
* c3
))
817 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
819 if ((y
= c3
+ (cc3
- u27
.d
* c3
)) == c3
+ (cc3
+ u27
.d
* c3
))
832 /* multiple precision stage */
833 /* Convert x to multi precision number,compute tan(x) by mptan() routine */
834 /* and converts result back to double */
843 __mptan (x
, &mpy
, p
);
844 __mp_dbl (&mpy
, &y
, p
);
845 LIBC_PROBE (slowtan
, 2, &x
, &y
);
850 libm_alias_double (__tan
, tan
)