1 /* sf_cos.c -- float version of s_cos.c.
2  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3  */
4 
5 /*
6  * ====================================================
7  * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
8  *
9  * Developed at SunPro, a Sun Microsystems, Inc. business.
10  * Permission to use, copy, modify, and distribute this
11  * software is freely granted, provided that this notice
12  * is preserved.
13  * ====================================================
14  */
15 
16 #include "fdlibm.h"
17 #if __OBSOLETE_MATH_FLOAT
18 
19 float
cosf(float x)20 cosf(float x)
21 {
22     float y[2], z = 0.0;
23     __int32_t n, ix;
24 
25     GET_FLOAT_WORD(ix, x);
26 
27     /* |x| ~< pi/4 */
28     ix &= 0x7fffffff;
29     if (ix <= 0x3f490fd8)
30         return __kernel_cosf(x, z);
31 
32     /* cos(Inf or NaN) is NaN */
33     else if (!FLT_UWORD_IS_FINITE(ix))
34         return __math_invalidf(x);
35 
36     /* argument reduction needed */
37     else {
38         n = __rem_pio2f(x, y);
39         switch (n & 3) {
40         case 0:
41             return __kernel_cosf(y[0], y[1]);
42         case 1:
43             return -__kernel_sinf(y[0], y[1], 1);
44         case 2:
45             return -__kernel_cosf(y[0], y[1]);
46         default:
47             return __kernel_sinf(y[0], y[1], 1);
48         }
49     }
50 }
51 
52 #if defined(_HAVE_ALIAS_ATTRIBUTE)
53 #ifndef __clang__
54 #pragma GCC diagnostic ignored "-Wmissing-attributes"
55 #endif
56 __strong_reference(cosf, _cosf);
57 #endif
58 
59 _MATH_ALIAS_f_f(cos)
60 #else
61 #include "../common/cosf.c"
62 #endif /* __OBSOLETE_MATH_FLOAT */
63