|
23 | 23 |
|
24 | 24 | #define erx 8.4506291151e-01f /* 0x3f58560b */
|
25 | 25 |
|
26 |
| -// Coefficients for approximation to erf on [00.84375] |
| 26 | +// Coefficients for approximation to erf on [0, 0.84375] |
27 | 27 |
|
28 | 28 | #define efx 1.2837916613e-01f /* 0x3e0375d4 */
|
29 | 29 | #define efx8 1.0270333290e+00f /* 0x3f8375d4 */
|
|
39 | 39 | #define qq4 1.3249473704e-04f /* 0x390aee49 */
|
40 | 40 | #define qq5 -3.9602282413e-06f /* 0xb684e21a */
|
41 | 41 |
|
42 |
| -// Coefficients for approximation to erf in [0.843751.25] |
| 42 | +// Coefficients for approximation to erf in [0.84375, 1.25] |
43 | 43 |
|
44 | 44 | #define pa0 -2.3621185683e-03f /* 0xbb1acdc6 */
|
45 | 45 | #define pa1 4.1485610604e-01f /* 0x3ed46805 */
|
|
55 | 55 | #define qa5 1.3637083583e-02f /* 0x3c5f6e13 */
|
56 | 56 | #define qa6 1.1984500103e-02f /* 0x3c445aa3 */
|
57 | 57 |
|
58 |
| -// Coefficients for approximation to erfc in [1.251/0.35] |
| 58 | +// Coefficients for approximation to erfc in [1.25, 1/0.35] |
59 | 59 |
|
60 | 60 | #define ra0 -9.8649440333e-03f /* 0xbc21a093 */
|
61 | 61 | #define ra1 -6.9385856390e-01f /* 0xbf31a0b7 */
|
|
74 | 74 | #define sa7 6.5702495575e+00f /* 0x40d23f7c */
|
75 | 75 | #define sa8 -6.0424413532e-02f /* 0xbd777f97 */
|
76 | 76 |
|
77 |
| -// Coefficients for approximation to erfc in [1/.3528] |
| 77 | +// Coefficients for approximation to erfc in [1/0.35, 28] |
78 | 78 |
|
79 | 79 | #define rb0 -9.8649431020e-03f /* 0xbc21a092 */
|
80 | 80 | #define rb1 -7.9928326607e-01f /* 0xbf4c9dd4 */
|
@@ -130,7 +130,8 @@ _CLC_OVERLOAD _CLC_DEF float erf(float x) {
|
130 | 130 |
|
131 | 131 | // |x| < 6
|
132 | 132 | float z = as_float(ix & 0xfffff000);
|
133 |
| - float r = exp(mad(-z, z, -0.5625f)) * exp(mad(z-absx, z+absx, q)); |
| 133 | + float r = exp(-z * z) * exp(mad(z - absx, z + absx, q)); |
| 134 | + r *= 0x1.23ba94p-1f; // exp(-0.5625) |
134 | 135 | r = 1.0f - MATH_DIVIDE(r, absx);
|
135 | 136 | ret = absx < 6.0f ? r : ret;
|
136 | 137 |
|
|
0 commit comments