diff -r 9227d2a2c080 -r c4d124ed9f8e patches/glibc/2_9/180-math-tests.patch --- a/patches/glibc/2_9/180-math-tests.patch Sat Apr 11 19:03:02 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -Original patch from: gentoo/src/patchsets/glibc/2.9/0090_all_glibc-math-tests.patch - --= BEGIN original header =- -From: "Joseph S. Myers" -To: libc-alpha at sourceware dot org -Date: Tue, 15 Jul 2008 14:43:04 +0000 (UTC) -Subject: expm1 ulps - -If you test glibc on i686 with GCC 4.3, you get a test-ildoubl failure: - -Failure: Test: expm1 (1) == M_El - 1.0 -Result: - is: 1.71828182845904523532e+00 0xd.bf0a8b14576953500000p-3 - should be: 1.71828182845904523543e+00 0xd.bf0a8b14576953600000p-3 - difference: 1.08420217248550443401e-19 0x8.00000000000000000000p-66 - ulp : 1.0000 - max.ulp : 0.0000 -Maximal error of `expm1' - is : 1 ulp - accepted: 0 ulp - -What happens is that the inline expansion of expm1l uses __builtin_expm1l, -and GCC 4.3 optimizes calls to __builtin_expm1l with constant argument to -a correctly rounded result using MPFR. The result returned is thus the -value of e-1 rounded once to long double precision. However, the test -expects M_El - 1.0, and the result of rounding e to long double precision, -then subtracting 1, differs in the last place from the result of rounding -e-1 to long double precision (the latter has smaller exponent, and the -last bit is 1). - -There are two obvious approaches possible to fixing this. The first patch -below changes the expectation to a decimal expansion for e-1 (taken from -that of M_El) rather than doing arithmetic in the expected value. This in -turn requires ulps to be set for the out-of-line version of expm1. It -might also need ulps to be set for the inline version for older compilers -if they should continue to pass the test, and possibly for other targets. -The second patch below takes the alternative approach of keeping the -existing expectation (which has the wrong bit in the last place) and -setting ulps for the inline expansion of expm1, which avoids the risk of -breaking the test for other targets. - -2008-07-15 Joseph Myers - - * sysdeps/i386/fpu/libm-test-ulps: Add inline long double ulps for - expm1. - --= END original header =- - -diff -durN glibc-2_9.orig/sysdeps/i386/fpu/libm-test-ulps glibc-2_9/sysdeps/i386/fpu/libm-test-ulps ---- glibc-2_9.orig/sysdeps/i386/fpu/libm-test-ulps 2006-01-15 18:59:37.000000000 +0100 -+++ glibc-2_9/sysdeps/i386/fpu/libm-test-ulps 2009-02-02 22:00:47.000000000 +0100 -@@ -453,6 +453,10 @@ - ildouble: 8 - ldouble: 8 - -+# expm1 -+Test "expm1 (1) == M_El - 1.0": -+ildouble: 1 -+ - # gamma - Test "gamma (-0.5) == log(2*sqrt(pi))": - double: 1 -@@ -1134,6 +1138,9 @@ - ildouble: 8 - ldouble: 8 - -+Function: "expm1": -+ildouble: 1 -+ - Function: "gamma": - double: 1 - idouble: 1