This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Fix ulps regeneration for *-finite tests [committed]
- From: Joseph Myers <joseph at codesourcery dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Tue, 19 Jan 2016 21:43:51 +0000
- Subject: Fix ulps regeneration for *-finite tests [committed]
- Authentication-results: sourceware.org; auth=none
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. Committed.
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.
diff --git a/math/gen-libm-test.pl b/math/gen-libm-test.pl
index eb1c299..17f17f7 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 219ba3c..aa3d696 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 219ba3c..aa3d696 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 0c2914c..5bf6f3e 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 0350eb9..4161342 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
--
Joseph S. Myers
joseph@codesourcery.com