]>
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-2017 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 /*********************************************************************/
43 #include <math_private.h>
45 #include <stap-probe.h>
51 static double tanMp (double);
52 void __mptan (double, mp_no
*, int);
62 double a
, da
, a2
, b
, db
, c
, dc
, c1
, cc1
, c2
, cc2
, c3
, cc3
, fi
, ffi
, gi
, pz
,
63 s
, sy
, t
, t1
, t2
, t3
, t4
, t7
, t8
, t9
, t10
, w
, x2
, xn
, xx2
, y
, ya
,
64 yya
, z0
, z
, zz
, z2
, zz2
;
70 mp_no mpa
, mpt1
, mpt2
;
74 int __branred (double, double *, double *);
75 int __mpranred (double, mp_no
*, int);
77 SET_RESTORE_ROUND_53BIT (FE_TONEAREST
);
81 ux
= num
.i
[HIGH_HALF
];
82 if ((ux
& 0x7ff00000) == 0x7ff00000)
84 if ((ux
& 0x7fffffff) == 0x7ff00000)
90 w
= (x
< 0.0) ? -x
: x
;
92 /* (I) The case abs(x) <= 1.259e-8 */
95 math_check_force_underflow_nonneg (w
);
100 /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
106 t2
= d9
.d
+ x2
* d11
.d
;
112 if ((y
= x
+ (t2
- u1
.d
* t2
)) == x
+ (t2
+ u1
.d
* t2
))
119 c1
= a25
.d
+ x2
* a27
.d
;
120 c1
= a23
.d
+ x2
* c1
;
121 c1
= a21
.d
+ x2
* c1
;
122 c1
= a19
.d
+ x2
* c1
;
123 c1
= a17
.d
+ x2
* c1
;
124 c1
= a15
.d
+ x2
* c1
;
127 EMULV (x
, x
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
);
128 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
129 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
130 ADD2 (a11
.d
, aa11
.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 (a9
.d
, aa9
.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 (a7
.d
, aa7
.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 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
137 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
138 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
139 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
140 MUL2 (x
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
141 ADD2 (x
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
142 if ((y
= c1
+ (cc1
- u2
.d
* c1
)) == c1
+ (cc1
+ u2
.d
* c1
))
151 /* (III) The case 0.0608 < abs(x) <= 0.787 */
155 i
= ((int) (mfftnhf
.d
+ TWO8
* w
));
158 s
= (x
< 0.0) ? -1 : 1;
159 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
162 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
163 if ((y
= fi
+ (t2
- fi
* u3
.d
)) == fi
+ (t2
+ fi
* u3
.d
))
168 t3
= (t2
< 0.0) ? -t2
: t2
;
169 t4
= fi
* ua3
.d
+ t3
* ub3
.d
;
170 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
178 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
179 EMULV (z
, z
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
);
180 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
181 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
182 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
183 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
184 MUL2 (z
, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
185 ADD2 (z
, 0.0, c2
, cc2
, c1
, cc1
, t1
, t2
);
187 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
188 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
189 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
190 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
193 if ((y
= c3
+ (cc3
- u4
.d
* c3
)) == c3
+ (cc3
+ u4
.d
* c3
))
202 /* (---) The case 0.787 < abs(x) <= 25 */
205 /* Range reduction by algorithm i */
206 t
= (x
* hpinv
.d
+ toint
.d
);
209 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
210 n
= v
.i
[LOW_HALF
] & 0x00000001;
227 /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
234 /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
238 t2
= d9
.d
+ a2
* d11
.d
;
242 t2
= da
+ a
* a2
* t2
;
246 /* First stage -cot */
248 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
250 if ((y
= c
+ (dc
- u6
.d
* c
)) == c
+ (dc
+ u6
.d
* c
))
258 /* First stage tan */
259 if ((y
= a
+ (t2
- u5
.d
* a
)) == a
+ (t2
+ u5
.d
* a
))
266 /* Range reduction by algorithm ii */
267 t
= (x
* hpinv
.d
+ toint
.d
);
270 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
271 n
= v
.i
[LOW_HALF
] & 0x00000001;
277 da
= ((t
- a
) - t1
) + da
;
280 EADD (a
, da
, t1
, t2
);
283 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
285 c1
= a25
.d
+ x2
* a27
.d
;
286 c1
= a23
.d
+ x2
* c1
;
287 c1
= a21
.d
+ x2
* c1
;
288 c1
= a19
.d
+ x2
* c1
;
289 c1
= a17
.d
+ x2
* c1
;
290 c1
= a15
.d
+ x2
* c1
;
293 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
294 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
295 ADD2 (a11
.d
, aa11
.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 (a9
.d
, aa9
.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 (a7
.d
, aa7
.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 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
302 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
303 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
304 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
305 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
306 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
310 /* Second stage -cot */
311 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
313 if ((y
= c2
+ (cc2
- u8
.d
* c2
)) == c2
+ (cc2
+ u8
.d
* c2
))
321 /* Second stage tan */
322 if ((y
= c1
+ (cc1
- u7
.d
* c1
)) == c1
+ (cc1
+ u7
.d
* c1
))
332 /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
335 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
336 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
338 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
345 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
346 if ((y
= gi
- (t2
- gi
* u10
.d
)) == gi
- (t2
+ gi
* u10
.d
))
351 t3
= (t2
< 0.0) ? -t2
: t2
;
352 t4
= gi
* ua10
.d
+ t3
* ub10
.d
;
353 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
362 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
363 if ((y
= fi
+ (t2
- fi
* u9
.d
)) == fi
+ (t2
+ fi
* u9
.d
))
368 t3
= (t2
< 0.0) ? -t2
: t2
;
369 t4
= fi
* ua9
.d
+ t3
* ub9
.d
;
370 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
379 EADD (z0
, yya
, z
, zz
)
380 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
381 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
382 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
383 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
384 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
385 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
386 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
387 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
389 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
390 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
391 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
396 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
398 if ((y
= c3
+ (cc3
- u12
.d
* c3
)) == c3
+ (cc3
+ u12
.d
* c3
))
407 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
409 if ((y
= c3
+ (cc3
- u11
.d
* c3
)) == c3
+ (cc3
+ u11
.d
* c3
))
420 /* (---) The case 25 < abs(x) <= 1e8 */
423 /* Range reduction by algorithm ii */
424 t
= (x
* hpinv
.d
+ toint
.d
);
427 t1
= (x
- xn
* mp1
.d
) - xn
* mp2
.d
;
428 n
= v
.i
[LOW_HALF
] & 0x00000001;
434 da
= ((t
- a
) - t1
) + da
;
435 EADD (a
, da
, t1
, t2
);
451 /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
458 /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
462 t2
= d9
.d
+ a2
* d11
.d
;
466 t2
= da
+ a
* a2
* t2
;
470 /* First stage -cot */
472 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
474 if ((y
= c
+ (dc
- u14
.d
* c
)) == c
+ (dc
+ u14
.d
* c
))
482 /* First stage tan */
483 if ((y
= a
+ (t2
- u13
.d
* a
)) == a
+ (t2
+ u13
.d
* a
))
491 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
492 c1
= a25
.d
+ x2
* a27
.d
;
493 c1
= a23
.d
+ x2
* c1
;
494 c1
= a21
.d
+ x2
* c1
;
495 c1
= a19
.d
+ x2
* c1
;
496 c1
= a17
.d
+ x2
* c1
;
497 c1
= a15
.d
+ x2
* c1
;
500 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
501 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
502 ADD2 (a11
.d
, aa11
.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 (a9
.d
, aa9
.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 (a7
.d
, aa7
.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 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
509 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
510 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
511 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
512 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
513 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
517 /* Second stage -cot */
518 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
,
520 if ((y
= c2
+ (cc2
- u16
.d
* c2
)) == c2
+ (cc2
+ u16
.d
* c2
))
528 /* Second stage tan */
529 if ((y
= c1
+ (cc1
- u15
.d
* c1
)) == c1
+ (cc1
+ u15
.d
* c1
))
539 /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
541 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
542 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
544 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
551 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
552 if ((y
= gi
- (t2
- gi
* u18
.d
)) == gi
- (t2
+ gi
* u18
.d
))
557 t3
= (t2
< 0.0) ? -t2
: t2
;
558 t4
= gi
* ua18
.d
+ t3
* ub18
.d
;
559 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
568 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
569 if ((y
= fi
+ (t2
- fi
* u17
.d
)) == fi
+ (t2
+ fi
* u17
.d
))
574 t3
= (t2
< 0.0) ? -t2
: t2
;
575 t4
= fi
* ua17
.d
+ t3
* ub17
.d
;
576 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
585 EADD (z0
, yya
, z
, zz
);
586 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
587 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
588 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
589 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
590 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
591 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
592 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
593 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
595 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
596 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
597 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
602 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
604 if ((y
= c3
+ (cc3
- u20
.d
* c3
)) == c3
+ (cc3
+ u20
.d
* c3
))
613 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
615 if ((y
= c3
+ (cc3
- u19
.d
* c3
)) == c3
+ (cc3
+ u19
.d
* c3
))
625 /* (---) The case 1e8 < abs(x) < 2**1024 */
626 /* Range reduction by algorithm iii */
627 n
= (__branred (x
, &a
, &da
)) & 0x00000001;
628 EADD (a
, da
, t1
, t2
);
644 /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
651 /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
655 t2
= d9
.d
+ a2
* d11
.d
;
659 t2
= da
+ a
* a2
* t2
;
662 /* First stage -cot */
664 DIV2 (1.0, 0.0, b
, db
, c
, dc
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
666 if ((y
= c
+ (dc
- u22
.d
* c
)) == c
+ (dc
+ u22
.d
* c
))
674 /* First stage tan */
675 if ((y
= a
+ (t2
- u21
.d
* a
)) == a
+ (t2
+ u21
.d
* a
))
683 /* Reduction by algorithm iv */
685 n
= (__mpranred (x
, &mpa
, p
)) & 0x00000001;
686 __mp_dbl (&mpa
, &a
, p
);
687 __dbl_mp (a
, &mpt1
, p
);
688 __sub (&mpa
, &mpt1
, &mpt2
, p
);
689 __mp_dbl (&mpt2
, &da
, p
);
691 MUL2 (a
, da
, a
, da
, x2
, xx2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
693 c1
= a25
.d
+ x2
* a27
.d
;
694 c1
= a23
.d
+ x2
* c1
;
695 c1
= a21
.d
+ x2
* c1
;
696 c1
= a19
.d
+ x2
* c1
;
697 c1
= a17
.d
+ x2
* c1
;
698 c1
= a15
.d
+ x2
* c1
;
701 ADD2 (a13
.d
, aa13
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
702 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
703 ADD2 (a11
.d
, aa11
.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 (a9
.d
, aa9
.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 (a7
.d
, aa7
.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 (a5
.d
, aa5
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
710 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
711 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
712 MUL2 (x2
, xx2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
713 MUL2 (a
, da
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
714 ADD2 (a
, da
, c2
, cc2
, c1
, cc1
, t1
, t2
);
718 /* Second stage -cot */
719 DIV2 (1.0, 0.0, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
,
721 if ((y
= c2
+ (cc2
- u24
.d
* c2
)) == c2
+ (cc2
+ u24
.d
* c2
))
729 /* Second stage tan */
730 if ((y
= c1
+ (cc1
- u23
.d
* c1
)) == c1
+ (cc1
+ u23
.d
* c1
))
740 /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
742 i
= ((int) (mfftnhf
.d
+ TWO8
* ya
));
743 z
= (z0
= (ya
- xfg
[i
][0].d
)) + yya
;
745 pz
= z
+ z
* z2
* (e0
.d
+ z2
* e1
.d
);
752 t2
= pz
* (fi
+ gi
) / (fi
+ pz
);
753 if ((y
= gi
- (t2
- gi
* u26
.d
)) == gi
- (t2
+ gi
* u26
.d
))
758 t3
= (t2
< 0.0) ? -t2
: t2
;
759 t4
= gi
* ua26
.d
+ t3
* ub26
.d
;
760 if ((y
= gi
- (t2
- t4
)) == gi
- (t2
+ t4
))
769 t2
= pz
* (gi
+ fi
) / (gi
- pz
);
770 if ((y
= fi
+ (t2
- fi
* u25
.d
)) == fi
+ (t2
+ fi
* u25
.d
))
775 t3
= (t2
< 0.0) ? -t2
: t2
;
776 t4
= fi
* ua25
.d
+ t3
* ub25
.d
;
777 if ((y
= fi
+ (t2
- t4
)) == fi
+ (t2
+ t4
))
786 EADD (z0
, yya
, z
, zz
);
787 MUL2 (z
, zz
, z
, zz
, z2
, zz2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
788 c1
= z2
* (a7
.d
+ z2
* (a9
.d
+ z2
* a11
.d
));
789 ADD2 (a5
.d
, aa5
.d
, c1
, 0.0, c2
, cc2
, t1
, t2
);
790 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
791 ADD2 (a3
.d
, aa3
.d
, c1
, cc1
, c2
, cc2
, t1
, t2
);
792 MUL2 (z2
, zz2
, c2
, cc2
, c1
, cc1
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
793 MUL2 (z
, zz
, c1
, cc1
, c2
, cc2
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
794 ADD2 (z
, zz
, c2
, cc2
, c1
, cc1
, t1
, t2
);
796 ADD2 (fi
, ffi
, c1
, cc1
, c2
, cc2
, t1
, t2
);
797 MUL2 (fi
, ffi
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
);
798 SUB2 (1.0, 0.0, c3
, cc3
, c1
, cc1
, t1
, t2
);
803 DIV2 (c1
, cc1
, c2
, cc2
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
805 if ((y
= c3
+ (cc3
- u28
.d
* c3
)) == c3
+ (cc3
+ u28
.d
* c3
))
814 DIV2 (c2
, cc2
, c1
, cc1
, c3
, cc3
, t1
, t2
, t3
, t4
, t5
, t6
, t7
, t8
, t9
,
816 if ((y
= c3
+ (cc3
- u27
.d
* c3
)) == c3
+ (cc3
+ u27
.d
* c3
))
829 /* multiple precision stage */
830 /* Convert x to multi precision number,compute tan(x) by mptan() routine */
831 /* and converts result back to double */
840 __mptan (x
, &mpy
, p
);
841 __mp_dbl (&mpy
, &y
, p
);
842 LIBC_PROBE (slowtan
, 2, &x
, &y
);
847 weak_alias (__tan
, tan
)
848 # ifdef NO_LONG_DOUBLE
849 strong_alias (__tan
, __tanl
)
850 weak_alias (__tanl
, tanl
)