mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-23 02:27:39 +03:00
x86: fixed testing equality of floating point numbers (#150)
* x86: fixed testing equality of floating point numbers * x86: removed unused macro branch * x86: marked assert_approx_eq as used only in tests
This commit is contained in:
@@ -3224,7 +3224,10 @@ unsafe fn _mm256_rcp_ps() {
|
||||
let r = avx::_mm256_rcp_ps(a);
|
||||
let e = f32x8::new(0.99975586, 0.49987793, 0.33325195, 0.24993896,
|
||||
0.19995117, 0.16662598, 0.14282227, 0.12496948);
|
||||
assert_eq!(r, e);
|
||||
let rel_err = 0.00048828125;
|
||||
for i in 0..8 {
|
||||
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
|
||||
}
|
||||
}
|
||||
|
||||
#[simd_test = "avx"]
|
||||
@@ -3233,7 +3236,10 @@ unsafe fn _mm256_rsqrt_ps() {
|
||||
let r = avx::_mm256_rsqrt_ps(a);
|
||||
let e = f32x8::new(0.99975586, 0.7069092, 0.5772705, 0.49987793,
|
||||
0.44714355, 0.40820313, 0.3779297, 0.3534546);
|
||||
assert_eq!(r, e);
|
||||
let rel_err = 0.00048828125;
|
||||
for i in 0..8 {
|
||||
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
|
||||
}
|
||||
}
|
||||
|
||||
#[simd_test = "avx"]
|
||||
|
||||
@@ -338,4 +338,15 @@ macro_rules! constify_imm2 {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
macro_rules! assert_approx_eq {
|
||||
($a:expr, $b:expr, $eps:expr) => ({
|
||||
let (a, b) = (&$a, &$b);
|
||||
assert!((*a - *b).abs() < $eps,
|
||||
"assertion failed: `(left !== right)` \
|
||||
(left: `{:?}`, right: `{:?}`, expect diff: `{:?}`, real diff: `{:?}`)",
|
||||
*a, *b, $eps, (*a - *b).abs());
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1804,7 +1804,10 @@ unsafe fn _mm_rcp_ps() {
|
||||
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
|
||||
let r = sse::_mm_rcp_ps(a);
|
||||
let e = f32x4::new(0.24993896, 0.0769043, 0.06248474, 0.0099983215);
|
||||
assert_eq!(r, e);
|
||||
let rel_err = 0.00048828125;
|
||||
for i in 0..4 {
|
||||
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
|
||||
}
|
||||
}
|
||||
|
||||
#[simd_test = "sse"]
|
||||
@@ -1812,7 +1815,10 @@ unsafe fn _mm_rsqrt_ss() {
|
||||
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
|
||||
let r = sse::_mm_rsqrt_ss(a);
|
||||
let e = f32x4::new(0.49987793, 13.0, 16.0, 100.0);
|
||||
assert_eq!(r, e);
|
||||
let rel_err = 0.00048828125;
|
||||
for i in 0..4 {
|
||||
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
|
||||
}
|
||||
}
|
||||
|
||||
#[simd_test = "sse"]
|
||||
@@ -1820,7 +1826,10 @@ unsafe fn _mm_rsqrt_ps() {
|
||||
let a = f32x4::new(4.0, 13.0, 16.0, 100.0);
|
||||
let r = sse::_mm_rsqrt_ps(a);
|
||||
let e = f32x4::new(0.49987793, 0.2772827, 0.24993896, 0.099990845);
|
||||
assert_eq!(r, e);
|
||||
let rel_err = 0.00048828125;
|
||||
for i in 0..4 {
|
||||
assert_approx_eq!(r.extract(i), e.extract(i), 2. * rel_err);
|
||||
}
|
||||
}
|
||||
|
||||
#[simd_test = "sse"]
|
||||
|
||||
Reference in New Issue
Block a user