Message ID | 20140131123255.GB67972@msticlxl7.ims.intel.com |
---|---|
State | New |
Headers | show |
On Fri, Jan 31, 2014 at 1:32 PM, Ilya Tocar <tocarip.intel@gmail.com> wrote: >> >> We won't get zero from exponential function, so expecting zero result >> >> is flawed anyway. >> >> >> >> If we would like to introduce universal epsilon comparisons into the >> >> testsuite, then please read [1]. Being overly pedantic, the definition >> >> should be "|(v[i] - u.a[i]) / v[i]|", as stated in [2]. >> >> >> >> [1] http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ >> >> [2] http://en.wikipedia.org/wiki/Relative_error >> >> >> > >> > We get zero from testing zero-masking. Currently we produce 0/0 = NaN. >> > Comparison with NaN is always false, so tests pass. But I think that >> > this should be fixed to avoid division by zero. As for being more >> > pedantic about comparison, I doubt that its useful, when we use >> > 0.0001 as eps. >> >> In this case, please add simple check for zero, with the above >> comment. We don't test exp function, but masking. >> > > Something like this? Yes, this is OK, with a small comment fix. > gcc/testsuite/gcc.target/i386/m512-check.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/gcc/testsuite/gcc.target/i386/m512-check.h b/gcc/testsuite/gcc.target/i386/m512-check.h > index 3209039..a96a103 100644 > --- a/gcc/testsuite/gcc.target/i386/m512-check.h > +++ b/gcc/testsuite/gcc.target/i386/m512-check.h > @@ -58,6 +58,16 @@ check_rough_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v, \ > \ > for (i = 0; i < ARRAY_SIZE (u.a); i++) \ > { \ > + /* We will always have v[i] == 0 == u.a[i] for some i, \ We can have ... Thanks, Uros.
diff --git a/gcc/testsuite/gcc.target/i386/m512-check.h b/gcc/testsuite/gcc.target/i386/m512-check.h index 3209039..a96a103 100644 --- a/gcc/testsuite/gcc.target/i386/m512-check.h +++ b/gcc/testsuite/gcc.target/i386/m512-check.h @@ -58,6 +58,16 @@ check_rough_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v, \ \ for (i = 0; i < ARRAY_SIZE (u.a); i++) \ { \ + /* We will always have v[i] == 0 == u.a[i] for some i, \ + when we test zero-masking. */ \ + if (v[i] == 0.0 && u.a[i] == 0.0) \ + continue; \ + if (v[i] == 0.0 && u.a[i] != 0.0) \ + { \ + err++; \ + PRINTF ("%i: " FMT " != " FMT "\n", \ + i, v[i], u.a[i]); \ + } \ VALUE_TYPE rel_err = (u.a[i] - v[i]) / v[i]; \ if (((rel_err < 0) ? -rel_err : rel_err) > eps) \ { \