Hi,

The attached patch adjusts a fortran test to decrease the precision of one of the points on the bessel curve. gfortran.dg/bessel_7.f90 fails for a value 3.0 because libm does not seem to be accurate enough compared to what the test expects.

I did a like-for-like run on x86 vs aarch64. The issue seems to be in the level of precision that this test checks for. At the fail point, though the two values being compared are comparable, they aren't equal.

On aarch64, it looks like this:

33 -0.138861489E+30 -0.138861319E+30   -0.17E+24 10.2699956894  T  T
34 -0.304842886E+31 -0.304842493E+31   -0.39E+25 10.8117713928  T  T
35 -0.689588648E+32 -0.689587681E+32   -0.97E+26 11.7649326324  T  T
36 -0.160599184E+34 -0.160598952E+34   -0.23E+28 12.1240425110  T  F

If you see row #36, the 2nd and 3rd column values are comparable, but not equal. The delta is indicated in the 5th column which is greater that what the test expects - 12 ULPs.

On x86 it looks like this:

33 -0.138861508E+30 -0.138861366E+30   -0.14E+24  8.5583286285  T  T
34 -0.304842916E+31 -0.304842614E+31   -0.30E+25  8.3167467117  T  T
35 -0.689588696E+32 -0.689587971E+32   -0.73E+26  8.8236989975  T  T
36 -0.160599184E+34 -0.160599029E+34   -0.15E+28  8.0826950073  T  T

The delta on aarch64 is more than x86. If we increase the tolerance level for precision as shown in the patch, the test works fine for both x86 and aarch64.

Tested on aarch64-none-linux-gnu, x86_64-unknown-linux-gnu.

OK for trunk?

Thanks,
Tejas.

Changelog:

2014-04-23  Tejas Belagod  <tejas.bela...@arm.com>

testsuite/

        * gfortran.dg/bessel_7.f90(myeps): Increase precision tolerance level.
diff --git a/gcc/testsuite/gfortran.dg/bessel_7.f90 
b/gcc/testsuite/gfortran.dg/bessel_7.f90
index 7e63ed1..c6b5f74 100644
--- a/gcc/testsuite/gfortran.dg/bessel_7.f90
+++ b/gcc/testsuite/gfortran.dg/bessel_7.f90
@@ -16,7 +16,7 @@
 implicit none
 real,parameter :: values(*) = [0.0, 0.5, 1.0, 0.9, 
1.8,2.0,3.0,4.0,4.25,8.0,34.53, 475.78] 
 real,parameter :: myeps(size(values)) = epsilon(0.0) &
-                  * [2, 3, 4, 5, 8, 2, 12, 6, 7, 6, 36, 168 ]
+                  * [2, 3, 4, 5, 8, 2, 13, 6, 7, 6, 36, 168 ]
 ! The following is sufficient for me - the values above are a bit
 ! more tolerant
 !                  * [0, 0, 0, 3, 3, 0, 9, 0, 2, 1, 22, 130 ]

Reply via email to