1/* k_sinf.c -- float version of k_sin.c 2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
| 1/* k_sinf.c -- float version of k_sin.c 2 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
| 3 * Optimized by Bruce D. Evans.
|
3 */ 4 5/* 6 * ==================================================== 7 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 8 * 9 * Developed at SunPro, a Sun Microsystems, Inc. business. 10 * Permission to use, copy, modify, and distribute this 11 * software is freely granted, provided that this notice 12 * is preserved. 13 * ==================================================== 14 */ 15 16#ifndef lint
| 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 lint
|
17static char rcsid[] = "$FreeBSD: head/lib/msun/src/k_sinf.c 151620 2005-10-24 14:08:36Z bde $";
| 18static char rcsid[] = "$FreeBSD: head/lib/msun/src/k_sinf.c 151796 2005-10-28 13:36:58Z bde $";
|
18#endif 19 20#include "math.h" 21#include "math_private.h" 22
| 19#endif 20 21#include "math.h" 22#include "math_private.h" 23
|
| 24/* Range of maximum relative error in polynomial: ~[-1.61e-10, 1.621e-10]. */
|
23static const float
| 25static const float
|
24half = 5.0000000000e-01,/* 0x3f000000 */ 25S1 = -1.6666667163e-01, /* 0xbe2aaaab */ 26S2 = 8.3333337680e-03, /* 0x3c088889 */ 27S3 = -1.9841270114e-04, /* 0xb9500d01 */ 28S4 = 2.7557314297e-06, /* 0x3638ef1b */ 29S5 = -2.5050759689e-08, /* 0xb2d72f34 */ 30S6 = 1.5896910177e-10; /* 0x2f2ec9d3 */
| 26half = 0.5, 27S1 = -0xaaaaab.0p-26, /* -0.1666666716337203979492187500 */ 28S2 = 0x8888ba.0p-30, /* 0.008333379402756690979003906250 */ 29S3 = -0xd02cb0.0p-36, /* -0.0001985307317227125167846679687 */ 30S4 = 0xbe18ff.0p-42; /* 0.000002832675590980215929448604584 */
|
31 32float 33__kernel_sinf(float x, float y, int iy) 34{ 35 float z,r,v; 36 37 z = x*x; 38 v = z*x;
| 31 32float 33__kernel_sinf(float x, float y, int iy) 34{ 35 float z,r,v; 36 37 z = x*x; 38 v = z*x;
|
39 r = S2+z*(S3+z*(S4+z*(S5+z*S6)));
| 39 r = S2+z*(S3+z*S4);
|
40 if(iy==0) return x+v*(S1+z*r); 41 else return x-((z*(half*y-v*r)-y)-v*S1); 42}
| 40 if(iy==0) return x+v*(S1+z*r); 41 else return x-((z*(half*y-v*r)-y)-v*S1); 42}
|