diff options
author | Joseph Myers <joseph@codesourcery.com> | 2016-01-19 21:42:58 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2016-01-19 21:42:58 +0000 |
commit | 2e3d0de31f2020fbf358b932db18b8c44e2c92d0 (patch) | |
tree | 6eb794364583af8bde33a78e47ac0d8311b1194e | |
parent | df782dc690775d93b0cc1076655a9b92b5a44ad0 (diff) | |
download | glibc-2e3d0de31f2020fbf358b932db18b8c44e2c92d0.tar.gz glibc-2e3d0de31f2020fbf358b932db18b8c44e2c92d0.tar.xz glibc-2e3d0de31f2020fbf358b932db18b8c44e2c92d0.zip |
Fix ulps regeneration for *-finite tests.
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.
-rw-r--r-- | ChangeLog | 9 | ||||
-rwxr-xr-x | math/gen-libm-test.pl | 7 | ||||
-rw-r--r-- | sysdeps/arm/libm-test-ulps | 4 | ||||
-rw-r--r-- | sysdeps/mips/mips32/libm-test-ulps | 4 | ||||
-rw-r--r-- | sysdeps/mips/mips64/libm-test-ulps | 4 | ||||
-rw-r--r-- | sysdeps/powerpc/nofpu/libm-test-ulps | 4 |
6 files changed, 22 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index d3b180fa01..e5d46bcf3b 100644 --- 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> diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl index eb1c29956d..17f17f7493 100755 --- a/math/gen-libm-test.pl +++ b/math/gen-libm-test.pl @@ -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'; diff --git a/sysdeps/arm/libm-test-ulps b/sysdeps/arm/libm-test-ulps index 219ba3cfbe..aa3d696863 100644 --- a/sysdeps/arm/libm-test-ulps +++ b/sysdeps/arm/libm-test-ulps @@ -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 diff --git a/sysdeps/mips/mips32/libm-test-ulps b/sysdeps/mips/mips32/libm-test-ulps index 219ba3cfbe..aa3d696863 100644 --- a/sysdeps/mips/mips32/libm-test-ulps +++ b/sysdeps/mips/mips32/libm-test-ulps @@ -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 diff --git a/sysdeps/mips/mips64/libm-test-ulps b/sysdeps/mips/mips64/libm-test-ulps index 0c2914cb26..5bf6f3e65b 100644 --- a/sysdeps/mips/mips64/libm-test-ulps +++ b/sysdeps/mips/mips64/libm-test-ulps @@ -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 diff --git a/sysdeps/powerpc/nofpu/libm-test-ulps b/sysdeps/powerpc/nofpu/libm-test-ulps index 0350eb9656..41613421de 100644 --- a/sysdeps/powerpc/nofpu/libm-test-ulps +++ b/sysdeps/powerpc/nofpu/libm-test-ulps @@ -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 |