1 #include "libm.h"
2 
3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
cosl(long double x)4 long double cosl(long double x) {
5 	return cos(x);
6 }
7 #elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
cosl(long double x)8 long double cosl(long double x)
9 {
10 	union ldshape u = {x};
11 	unsigned n;
12 	long double y[2], hi, lo;
13 
14 	u.i.se &= 0x7fff;
15 	if (u.i.se == 0x7fff)
16 		return x - x;
17 	x = u.f;
18 	if (x < M_PI_4) {
19 		if (u.i.se < 0x3fff - LDBL_MANT_DIG)
20 			/* raise inexact if x!=0 */
21 			return 1.0 + x;
22 		return __cosl(x, 0);
23 	}
24 	n = __rem_pio2l(x, y);
25 	hi = y[0];
26 	lo = y[1];
27 	switch (n & 3) {
28 	case 0:
29 		return __cosl(hi, lo);
30 	case 1:
31 		return -__sinl(hi, lo, 1);
32 	case 2:
33 		return -__cosl(hi, lo);
34 	case 3:
35 	default:
36 		return __sinl(hi, lo, 1);
37 	}
38 }
39 #endif
40