13a8617a8SJordan K. Hubbard /* k_sinf.c -- float version of k_sin.c 23a8617a8SJordan K. Hubbard * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. 311dc2417SBruce Evans * Optimized by Bruce D. Evans. 43a8617a8SJordan K. Hubbard */ 53a8617a8SJordan K. Hubbard 63a8617a8SJordan K. Hubbard /* 73a8617a8SJordan K. Hubbard * ==================================================== 83a8617a8SJordan K. Hubbard * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 93a8617a8SJordan K. Hubbard * 103a8617a8SJordan K. Hubbard * Developed at SunPro, a Sun Microsystems, Inc. business. 113a8617a8SJordan K. Hubbard * Permission to use, copy, modify, and distribute this 123a8617a8SJordan K. Hubbard * software is freely granted, provided that this notice 133a8617a8SJordan K. Hubbard * is preserved. 143a8617a8SJordan K. Hubbard * ==================================================== 153a8617a8SJordan K. Hubbard */ 163a8617a8SJordan K. Hubbard 173a8617a8SJordan K. Hubbard #ifndef lint 187f3dea24SPeter Wemm static char rcsid[] = "$FreeBSD$"; 193a8617a8SJordan K. Hubbard #endif 203a8617a8SJordan K. Hubbard 213a8617a8SJordan K. Hubbard #include "math.h" 223a8617a8SJordan K. Hubbard #include "math_private.h" 233a8617a8SJordan K. Hubbard 2411dc2417SBruce Evans /* Range of maximum relative error in polynomial: ~[-1.61e-10, 1.621e-10]. */ 253a8617a8SJordan K. Hubbard static const float 2611dc2417SBruce Evans half = 0.5, 2711dc2417SBruce Evans S1 = -0xaaaaab.0p-26, /* -0.1666666716337203979492187500 */ 2811dc2417SBruce Evans S2 = 0x8888ba.0p-30, /* 0.008333379402756690979003906250 */ 2911dc2417SBruce Evans S3 = -0xd02cb0.0p-36, /* -0.0001985307317227125167846679687 */ 3011dc2417SBruce Evans S4 = 0xbe18ff.0p-42; /* 0.000002832675590980215929448604584 */ 313a8617a8SJordan K. Hubbard 3259b19ff1SAlfred Perlstein float 3359b19ff1SAlfred Perlstein __kernel_sinf(float x, float y, int iy) 343a8617a8SJordan K. Hubbard { 353a8617a8SJordan K. Hubbard float z,r,v; 364339c67cSBruce Evans 373a8617a8SJordan K. Hubbard z = x*x; 383a8617a8SJordan K. Hubbard v = z*x; 3911dc2417SBruce Evans r = S2+z*(S3+z*S4); 403a8617a8SJordan K. Hubbard if(iy==0) return x+v*(S1+z*r); 413a8617a8SJordan K. Hubbard else return x-((z*(half*y-v*r)-y)-v*S1); 423a8617a8SJordan K. Hubbard } 43