| ... | @@ -81,9 +81,13 @@ fn rationalApproxBinary32(z: f32) f32 { | ... | @@ -81,9 +81,13 @@ fn rationalApproxBinary32(z: f32) f32 { |
| 81 | const pS2: f32 = -8.6563630030e-03; | 81 | const pS2: f32 = -8.6563630030e-03; |
| 82 | const qS1: f32 = -7.0662963390e-01; | 82 | const qS1: f32 = -7.0662963390e-01; |
| 83 | | 83 | |
| 84 | const p = z * (pS0 + z * (pS1 + z * pS2)); | 84 | // f64 is used instead of f32 to avoid |
| 85 | const q = 1.0 + z * qS1; | 85 | // a vectorization on x86_64. The vectorization |
| 86 | return p / q; | 86 | // causes extra floating point execeptions |
| | 87 | // that are prohibited by libc-test. |
| | 88 | const p: f64 = @as(f64, @floatCast(z)) * (pS0 + z * (pS1 + z * pS2)); |
| | 89 | const q: f64 = 1.0 + z * qS1; |
| | 90 | return @floatCast(p / q); |
| 87 | } | 91 | } |
| 88 | | 92 | |
| 89 | fn acosBinary32(x: f32) f32 { | 93 | fn acosBinary32(x: f32) f32 { |