]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix ulps regeneration for *-finite tests.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 19 Jan 2016 21:42:58 +0000 (21:42 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 19 Jan 2016 21:42:58 +0000 (21:42 +0000)
On running tests after from-scratch ulps regeneration, I found that
some libm tests failed with ulps in excess of those recorded in the
from-scratch regeneration, which should never happen unless those ulps
exceed the limit on ulps that can go in libm-test-ulps files.

Failure: Test: atan2_upward (inf, -inf)
Result:
 is:          2.35619498e+00   0x1.2d97ccp+1
 should be:   2.35619450e+00   0x1.2d97c8p+1
 difference:  4.76837159e-07   0x1.000000p-21
 ulp       :  2.0000
 max.ulp   :  1.0000
Maximal error of `atan2_upward'
 is      : 2 ulp
 accepted: 1 ulp
Failure: Test: carg_upward (-inf + inf i)
Result:
 is:          2.35619498e+00   0x1.2d97ccp+1
 should be:   2.35619450e+00   0x1.2d97c8p+1
 difference:  4.76837159e-07   0x1.000000p-21
 ulp       :  2.0000
 max.ulp   :  1.0000
Maximal error of `carg_upward'
 is      : 2 ulp
 accepted: 1 ulp

The problem comes from the addition of tests for the finite-math-only
versions of libm functions.  Those tests share ulps with the default
function variants.  make regen-ulps runs the default tests before the
finite-math-only tests, concatenating the resulting ulps before
feeding them to gen-libm-test.pl to generate a new libm-test-ulps
file.  But gen-libm-test.pl always takes the last ulps value given for
any (function, type) pair.  So, if the largest ulps for a function
come from non-finite inputs, a from-scratch regeneration loses those
ulps.

This patch fixes gen-libm-test.pl, in the case where there are
multiple ulps values for a (function, type) pair - which can only
happen as part of a regeneration - to take the largest ulps value
rather than the last one.

Tested for ARM / MIPS / powerpc-nofpu.

* math/gen-libm-test.pl (parse_ulps): Do not reduce
already-recorded ulps.
* sysdeps/arm/libm-test-ulps: Regenerated.
* sysdeps/mips/mips32/libm-test-ulps: Likewise.
* sysdeps/mips/mips64/libm-test-ulps: Likewise.
* sysdeps/powerpc/nofpu/libm-test-ulps: Likewise.

ChangeLog
math/gen-libm-test.pl
sysdeps/arm/libm-test-ulps
sysdeps/mips/mips32/libm-test-ulps
sysdeps/mips/mips64/libm-test-ulps
sysdeps/powerpc/nofpu/libm-test-ulps

index d3b180fa017cb068ce6c6c0afc2edb13aa24be05..e5d46bcf3b3428fbf6d14eef3ed0998653c2ac79 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-01-19  Joseph Myers  <joseph@codesourcery.com>
+
+       * math/gen-libm-test.pl (parse_ulps): Do not reduce
+       already-recorded ulps.
+       * sysdeps/arm/libm-test-ulps: Regenerated.
+       * sysdeps/mips/mips32/libm-test-ulps: Likewise.
+       * sysdeps/mips/mips64/libm-test-ulps: Likewise.
+       * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise.
+
 2016-01-19  Andrew Senkevich  <andrew.senkevich@intel.com>
            Paul Pluzhnikov  <ppluzhnikov@google.com>
 
index eb1c29956de7a5460eed4ca678415cd7879deac7..17f17f749366aba4a9eeda0569aeb352dcc2df4e 100755 (executable)
@@ -583,8 +583,11 @@ sub parse_ulps {
        # ignore
        next;
       } else {
-       $results{$test}{$type}{'ulp'}{$float} = $eps;
-       $results{$test}{'has_ulps'} = 1;
+       if (!defined ($results{$test}{$type}{'ulp'}{$float})
+           || $results{$test}{$type}{'ulp'}{$float} < $eps) {
+         $results{$test}{$type}{'ulp'}{$float} = $eps;
+         $results{$test}{'has_ulps'} = 1;
+       }
       }
       if ($type =~ /^real|imag$/) {
        $results{$test}{'type'} = 'complex';
index 219ba3cfbe8c17af9a1df8ea3e3b512e60625383..aa3d696863b1d36be9ea018367a9cb47810b2544 100644 (file)
@@ -115,7 +115,7 @@ ifloat: 2
 
 Function: "atan2_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 
@@ -291,7 +291,7 @@ ifloat: 2
 
 Function: "carg_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 
index 219ba3cfbe8c17af9a1df8ea3e3b512e60625383..aa3d696863b1d36be9ea018367a9cb47810b2544 100644 (file)
@@ -115,7 +115,7 @@ ifloat: 2
 
 Function: "atan2_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 
@@ -291,7 +291,7 @@ ifloat: 2
 
 Function: "carg_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 
index 0c2914cb261ccfadf608ff3e38d22cbb8c6def34..5bf6f3e65bc74e30551cec99a85623af301895e2 100644 (file)
@@ -155,7 +155,7 @@ ldouble: 3
 
 Function: "atan2_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 ildouble: 2
@@ -393,7 +393,7 @@ ldouble: 3
 
 Function: "carg_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 ildouble: 2
index 0350eb96562688a1176f1972eb126562317e88fc..41613421de4ccbc7e840fb5dcbad0369c33ad75f 100644 (file)
@@ -155,7 +155,7 @@ ldouble: 6
 
 Function: "atan2_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 ildouble: 3
@@ -393,7 +393,7 @@ ldouble: 6
 
 Function: "carg_upward":
 double: 1
-float: 1
+float: 2
 idouble: 1
 ifloat: 2
 ildouble: 3