11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* k_cosf.c -- float version of k_cos.c
21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Debugged and optimized by Bruce D. Evans.
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ====================================================
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Developed at SunPro, a Sun Microsystems, Inc. business.
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Permission to use, copy, modify, and distribute this
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * software is freely granted, provided that this notice
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * is preserved.
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ====================================================
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef INLINE_KERNEL_COSDF
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef lint
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic char rcsid[] = "$FreeBSD: src/lib/msun/src/k_cosf.c,v 1.15 2005/11/30 11:51:17 bde Exp $";
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include "math.h"
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include "math_private.h"
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]). */
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic const double
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectone =  1.0,
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectC0  = -0x1ffffffd0c5e81.0p-54,	/* -0.499999997251031003120 */
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectC1  =  0x155553e1053a42.0p-57,	/*  0.0416666233237390631894 */
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectC2  = -0x16c087e80f1e27.0p-62,	/* -0.00138867637746099294692 */
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source ProjectC3  =  0x199342e0ee5069.0p-68;	/*  0.0000243904487962774090654 */
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifdef INLINE_KERNEL_COSDF
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern inline
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectfloat
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__kernel_cosdf(double x)
391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{
401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	double r, w, z;
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* Try to optimize for parallel evaluation as in k_tanf.c. */
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	z = x*x;
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	w = z*z;
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	r = C2+z*C3;
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	return ((one+z*C0) + w*C1) + (w*z)*r;
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project}
48