12116Sjkh/* k_cosf.c -- float version of k_cos.c
22116Sjkh * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
3151796Sbde * Debugged and optimized by Bruce D. Evans.
42116Sjkh */
52116Sjkh
62116Sjkh/*
72116Sjkh * ====================================================
82116Sjkh * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
92116Sjkh *
102116Sjkh * Developed at SunPro, a Sun Microsystems, Inc. business.
112116Sjkh * Permission to use, copy, modify, and distribute this
128870Srgrimes * software is freely granted, provided that this notice
132116Sjkh * is preserved.
142116Sjkh * ====================================================
152116Sjkh */
162116Sjkh
17152869Sbde#ifndef INLINE_KERNEL_COSDF
18176451Sdas#include <sys/cdefs.h>
19176451Sdas__FBSDID("$FreeBSD$");
202116Sjkh#endif
212116Sjkh
222116Sjkh#include "math.h"
232116Sjkh#include "math_private.h"
242116Sjkh
25152869Sbde/* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */
26152869Sbdestatic const double
27151796Sbdeone =  1.0,
28152869SbdeC0  = -0x1ffffffd0c5e81.0p-54,	/* -0.499999997251031003120 */
29152869SbdeC1  =  0x155553e1053a42.0p-57,	/*  0.0416666233237390631894 */
30152869SbdeC2  = -0x16c087e80f1e27.0p-62,	/* -0.00138867637746099294692 */
31152869SbdeC3  =  0x199342e0ee5069.0p-68;	/*  0.0000243904487962774090654 */
322116Sjkh
33239192Sdim#ifdef INLINE_KERNEL_COSDF
34239192Sdimstatic __inline
35152647Sbde#endif
36239192Sdimfloat
37152869Sbde__kernel_cosdf(double x)
382116Sjkh{
39152951Sbde	double r, w, z;
40151698Sbde
41152951Sbde	/* Try to optimize for parallel evaluation as in k_tanf.c. */
42152951Sbde	z = x*x;
43152951Sbde	w = z*z;
44152951Sbde	r = C2+z*C3;
45152951Sbde	return ((one+z*C0) + w*C1) + (w*z)*r;
462116Sjkh}
47