OLD | NEW |
1 /* origin: FreeBSD /usr/src/lib/msun/src/k_sinf.c */ | 1 /* origin: FreeBSD /usr/src/lib/msun/src/k_sinf.c */ |
2 /* | 2 /* |
3 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. | 3 * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. |
4 * Optimized by Bruce D. Evans. | 4 * Optimized by Bruce D. Evans. |
5 */ | 5 */ |
6 /* | 6 /* |
7 * ==================================================== | 7 * ==================================================== |
8 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. | 8 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. |
9 * | 9 * |
10 * Developed at SunPro, a Sun Microsystems, Inc. business. | 10 * Developed at SunPro, a Sun Microsystems, Inc. business. |
11 * Permission to use, copy, modify, and distribute this | 11 * Permission to use, copy, modify, and distribute this |
12 * software is freely granted, provided that this notice | 12 * software is freely granted, provided that this notice |
13 * is preserved. | 13 * is preserved. |
14 * ==================================================== | 14 * ==================================================== |
15 */ | 15 */ |
16 | 16 |
17 #include "libm.h" | 17 #include "libm.h" |
18 | 18 |
19 /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ | 19 /* |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]). */ |
20 static const double | 20 static const double S1 = -0x15555554cbac77.0p-55, /* -0.166666666416265235595 */ |
21 S1 = -0x15555554cbac77.0p-55, /* -0.166666666416265235595 */ | 21 S2 = 0x111110896efbb2.0p-59, /* 0.0083333293858894631756 */ |
22 S2 = 0x111110896efbb2.0p-59, /* 0.0083333293858894631756 */ | 22 S3 = -0x1a00f9e2cae774.0p-65, /* -0.000198393348360966317347 */ |
23 S3 = -0x1a00f9e2cae774.0p-65, /* -0.000198393348360966317347 */ | 23 S4 = 0x16cd878c3b46a7.0p-71; /* 0.0000027183114939898219064 */ |
24 S4 = 0x16cd878c3b46a7.0p-71; /* 0.0000027183114939898219064 */ | |
25 | 24 |
26 float __sindf(double x) | 25 float __sindf(double x) { |
27 { | 26 double_t r, s, w, z; |
28 » double_t r, s, w, z; | |
29 | 27 |
30 » /* Try to optimize for parallel evaluation as in __tandf.c. */ | 28 /* Try to optimize for parallel evaluation as in __tandf.c. */ |
31 » z = x*x; | 29 z = x * x; |
32 » w = z*z; | 30 w = z * z; |
33 » r = S3 + z*S4; | 31 r = S3 + z * S4; |
34 » s = z*x; | 32 s = z * x; |
35 » return (x + s*(S1 + z*S2)) + s*w*r; | 33 return (x + s * (S1 + z * S2)) + s * w * r; |
36 } | 34 } |
OLD | NEW |