This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH][testsuite] Avoid division by zero.
- From: Ilya Tocar <tocarip dot intel at gmail dot com>
- To: Uros Bizjak <ubizjak at gmail dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, Kirill Yukhin <kirill dot yukhin at gmail dot com>
- Date: Fri, 31 Jan 2014 14:00:05 +0400
- Subject: Re: [PATCH][testsuite] Avoid division by zero.
- Authentication-results: sourceware.org; auth=none
- References: <20140130164102 dot GA55091 at msticlxl7 dot ims dot intel dot com> <CAFULd4bp6E1Qm8Q4BRP3zXXxW_S64-pFpcJuByjqJB8jE6LDyg at mail dot gmail dot com>
On 30 Jan 19:24, Uros Bizjak wrote:
> On Thu, Jan 30, 2014 at 5:41 PM, Ilya Tocar <tocarip.intel@gmail.com> wrote:
>
> > This patch removes possible division by zero.
> > Make check passes. Ok for trunk?
> >
> > 2014-01-30 Ilya Tocar <ilya.tocar@intel.com>
> >
> > * gcc.target/i386/m512-check.h: Use correct rounding values.
> >
> > ---
> > gcc/testsuite/gcc.target/i386/m512-check.h | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/gcc/testsuite/gcc.target/i386/m512-check.h b/gcc/testsuite/gcc.target/i386/m512-check.h
> > index 3209039..8441784 100644
> > --- a/gcc/testsuite/gcc.target/i386/m512-check.h
> > +++ b/gcc/testsuite/gcc.target/i386/m512-check.h
> > @@ -58,7 +58,8 @@ check_rough_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v, \
> > \
> > for (i = 0; i < ARRAY_SIZE (u.a); i++) \
> > { \
> > - VALUE_TYPE rel_err = (u.a[i] - v[i]) / v[i]; \
> > + VALUE_TYPE rel_err; \
> > + rel_err = v[i] != 0 ? (u.a[i] - v[i]) / v[i] : u.a[i]; \
> > if (((rel_err < 0) ? -rel_err : rel_err) > eps) \
> > { \
> > err++; \
>
> 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.