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