On Thu, Jan 30, 2014 at 5:41 PM, Ilya Tocar <tocarip.in...@gmail.com> wrote:

> This patch removes possible division by zero.
> Make check passes. Ok for trunk?
>
> 2014-01-30  Ilya Tocar  <ilya.to...@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

Uros.

Reply via email to