1/* k_cosf.c -- float version of k_cos.c 2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3 * Debugged and optimized by Bruce D. Evans. 4 */ 5 6/* 7 * ==================================================== 8 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 9 * 10 * Developed at SunPro, a Sun Microsystems, Inc. business. 11 * Permission to use, copy, modify, and distribute this 12 * software is freely granted, provided that this notice 13 * is preserved. 14 * ==================================================== 15 */ 16
| 1/* k_cosf.c -- float version of k_cos.c 2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 3 * Debugged and optimized by Bruce D. Evans. 4 */ 5 6/* 7 * ==================================================== 8 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 9 * 10 * Developed at SunPro, a Sun Microsystems, Inc. business. 11 * Permission to use, copy, modify, and distribute this 12 * software is freely granted, provided that this notice 13 * is preserved. 14 * ==================================================== 15 */ 16
|
17#ifndef INLINE_KERNEL_COSF
| 17#ifndef INLINE_KERNEL_COSDF
|
18#ifndef lint
| 18#ifndef lint
|
19static char rcsid[] = "$FreeBSD: head/lib/msun/src/k_cosf.c 152647 2005-11-21 04:57:12Z bde $";
| 19static char rcsid[] = "$FreeBSD: head/lib/msun/src/k_cosf.c 152869 2005-11-28 04:58:57Z bde $";
|
20#endif 21#endif 22 23#include "math.h" 24#include "math_private.h" 25
| 20#endif 21#endif 22 23#include "math.h" 24#include "math_private.h" 25
|
26/* |cos(x) - c(x)| < 2**-33.1 (~[-9.39e-11, 1.083e-10]). */ 27static const float
| 26/* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */ 27static const double
|
28one = 1.0,
| 28one = 1.0,
|
29C1 = 0xaaaaa5.0p-28, /* 0.041666645557 */ 30C2 = -0xb60615.0p-33, /* -0.0013887310633 */ 31C3 = 0xccf47d.0p-39; /* 0.000024432542887 */
| 29C0 = -0x1ffffffd0c5e81.0p-54, /* -0.499999997251031003120 */ 30C1 = 0x155553e1053a42.0p-57, /* 0.0416666233237390631894 */ 31C2 = -0x16c087e80f1e27.0p-62, /* -0.00138867637746099294692 */ 32C3 = 0x199342e0ee5069.0p-68; /* 0.0000243904487962774090654 */
|
32
| 33
|
33#ifdef INLINE_KERNEL_COSF
| 34#ifdef INLINE_KERNEL_COSDF
|
34extern inline 35#endif 36float
| 35extern inline 36#endif 37float
|
37__kernel_cosf(float x, float y)
| 38__kernel_cosdf(double x)
|
38{
| 39{
|
39 float hz,z,r,w;
| 40 double z,r;
|
40 41 z = x*x; 42 r = z*(C1+z*(C2+z*C3));
| 41 42 z = x*x; 43 r = z*(C1+z*(C2+z*C3));
|
43 hz = (float)0.5*z; 44 w = one-hz; 45 return w + (((one-w)-hz) + (z*r-x*y));
| 44 return (one+z*C0) + z*r;
|
46}
| 45}
|