[PATCH] Use -frounding-math for math testsuite

Andreas Jaeger aj@suse.com
Mon May 7 19:12:00 GMT 2012


On 05/07/2012 06:21 PM, David Miller wrote:
> From: Richard Guenther<rguenther@suse.de>
> Date: Mon, 7 May 2012 10:55:30 +0200 (CEST)
>
>> On Sat, 5 May 2012, Joseph S. Myers wrote:
>>
>>> On Wed, 2 May 2012, Richard Guenther wrote:
>>>
>>>> There is also -fsignalling-nans which is off by default, too.  Not sure
>>>> if that makes a difference though, but GCC for example folds x + 0.0 to
>>>> x with the default setting.
>>>
>>> I don't see it doing that folding, but if it did it would be a bug, since
>>> -fsigned-zeros is the default and -0.0 + 0.0 is +0.0 except in
>>> round-downwards mode.
>>
>> In fold_real_zero_addition_p - yes, it's also conditional on
>> -fno-signed-zeros.
>
> Unfortunately, this change causes all kinds of math test failures on sparc.
> For example, see math/test-double.out below.
>
> I think we should revert this until we can sort it out, especially since
> I anticipate that it will take quite some time to do so.

This is sad - especially as Joseph reported in a bugzilla that the 
change helped to fix some bugs.

Reference:
http://sourceware.org/bugzilla/show_bug.cgi?id=10846

But those numbers are really bad - I'll revert later.

What should be done here?

Andreas

> --------------------
> testing double (without inline functions)
> Failure: Test: gamma (0) == inf plus division by zero exception
> Result:
>   is:          1.61395818209599432208e-314   0x0.00000c2b5b2f00000000p-1022
>   should be:   inf   inf
> Failure: gamma (-3) == inf plus division by zero exception: Exception "Divide by zero" not set
> Failure: Test: gamma (-3) == inf plus division by zero exception
> Result:
>   is:          3.00000000000000000000e+00   0x1.80000000000000000000p+1
>   should be:   inf   inf
> Failure: Test: gamma (-0.5) == log(2*sqrt(pi))
> Result:
>   is:          5.00000135795793831939e-01   0x1.0000048e7a1bd0000000p-1
>   should be:   1.26551212348464536817e+00   0x1.43f89a3f0edd60000000p+0
>   difference:  7.65511987688851536227e-01   0x1.87f12fefa39ef0000000p-1
>   ulp       :  3447559502503159.5000
>   max.ulp   :  0.0000
> Failure: Test: gamma (-0.5) sets signgam to -1
> Result:
>   is:         1
>   should be:  -1
> Maximal error of `gamma'
>   is      : 3447559502503160 ulp
>   accepted: 0 ulp
> Failure: Test: lgamma (0) == inf plus division by zero exception
> Result:
>   is:          0.00000000000000000000e+00   0x0.00000000000000000000p+0
>   should be:   inf   inf
> Failure: Test: lgamma (-0) == inf plus division by zero exception
> Result:
>   is:         -0.00000000000000000000e+00  -0x0.00000000000000000000p+0
>   should be:   inf   inf
> Failure: lgamma (-3) == inf plus division by zero exception: Exception "Divide by zero" not set
> Failure: Test: lgamma (-3) == inf plus division by zero exception
> Result:
>   is:          3.00000000000000000000e+00   0x1.80000000000000000000p+1
>   should be:   inf   inf
> Failure: Test: errno for lgamma(-integer) == ERANGE
> Result:
>   is:         0
>   should be:  34
> Failure: lgamma (-max_value) == inf plus division by zero exception: Exception "Invalid operation" set
> Failure: Test: lgamma (-max_value) == inf plus division by zero exception
> Result:
>   is:          nan   nan
>   should be:   inf   inf
> Failure: lgamma (max_value) == inf plus overflow exception: Exception "Invalid operation" set
> Failure: Test: lgamma (max_value) == inf plus overflow exception
> Result:
>   is:          nan   nan
>   should be:   inf   inf
> Failure: Test: lgamma (-0.5) == log(2*sqrt(pi))
> Result:
>   is:          5.00000135795793831939e-01   0x1.0000048e7a1bd0000000p-1
>   should be:   1.26551212348464536817e+00   0x1.43f89a3f0edd60000000p+0
>   difference:  7.65511987688851536227e-01   0x1.87f12fefa39ef0000000p-1
>   ulp       :  3447559502503159.5000
>   max.ulp   :  0.0000
> Failure: Test: lgamma (-0.5) sets signgam to -1
> Result:
>   is:         1
>   should be:  -1
> Maximal error of `lgamma'
>   is      : 3447559502503160 ulp
>   accepted: 1 ulp
> Failure: tgamma (max_value) == inf plus overflow exception: Exception "Invalid operation" set
> Failure: Test: tgamma (max_value) == inf plus overflow exception
> Result:
>   is:          nan   nan
>   should be:   inf   inf
> Failure: Test: tgamma (-2) == NaN plus invalid exception
> Result:
>   is:         -2.00000000000000000000e+00  -0x1.00000000000000000000p+1
>   should be:   nan   nan
> Failure: Test: tgamma (-0.5) == -2 sqrt (pi)
> Result:
>   is:          1.64872127070012819416e+00   0x1.a61298e1e069c0000000p+0
>   should be:  -3.54490770181103220793e+00  -0x1.c5bf891b4ef6b0000000p+1
>   difference:  5.19362897251115995800e+00   0x1.4c646ac61f95c0000000p+2
>   ulp       :  11695012752650936.0000
>   max.ulp   :  1.0000
> Maximal error of `tgamma'
>   is      : 11695012752650936 ulp
>   accepted: 1 ulp
>
> Test suite completed:
>    4048 test cases plus 3587 tests for exception flags executed.
>    23 errors occurred.


-- 
  Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
   SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
    GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
     GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126



More information about the Libc-alpha mailing list