diff mbox

[testsuite] Avoid division by zero.

Message ID 20140131123255.GB67972@msticlxl7.ims.intel.com
State New
Headers show

Commit Message

Ilya Tocar Jan. 31, 2014, 12:32 p.m. UTC
> >> 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?

---
 gcc/testsuite/gcc.target/i386/m512-check.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Uros Bizjak Jan. 31, 2014, 12:43 p.m. UTC | #1
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 mbox

Patch

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)		\
 	{							\