Patchwork [Fortran,committed] PR 45367/36158 - Increase numeric tolerance in bessel_{6,7}.f90

login
register
mail settings
Submitter Steve Kargl
Date Aug. 22, 2010, 9:17 p.m.
Message ID <20100822211700.GA68815@troutmask.apl.washington.edu>
Download mbox | patch
Permalink /patch/62394/
State New
Headers show

Comments

Steve Kargl - Aug. 22, 2010, 9:17 p.m.
On Sun, Aug 22, 2010 at 04:06:42PM +0200, Tobias Burnus wrote:
>  Tobias Burnus wrote:
> >I increased now the tolerance based on Dominique's values and cross 
> >checked using -m32 on x86-64-linux. I hope it will now work on most 
> >systems
> 
> Dominique found additional failures for bessel_6.f90. Let's see how many 
> systems still fail with the numbers below. I have still the hope that 
> there are reasonable numbers which work on all systems with working 
> jn/yn functions ...
> 

One needs the bessel_7.f90 diff to get it to pass on i686-*-freebsd.
The simplify.c diff is a cleanup patch.

Patch

Index: testsuite/gfortran.dg/bessel_7.f90
===================================================================
--- testsuite/gfortran.dg/bessel_7.f90	(revision 163461)
+++ testsuite/gfortran.dg/bessel_7.f90	(working copy)
@@ -8,7 +8,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, 3, 5, 7, 2, 12, 4, 7, 3, 30, 168 ]
+                  * [2, 3, 3, 5, 7, 2, 12, 4, 7, 6, 30, 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 ]
@@ -19,7 +19,7 @@  real :: rec(0:Nmax), lib(0:Nmax)
 integer :: i
 
 do i = 1, ubound(values,dim=1)
-  call compare(values(i), myeps(i), nit(i), 3*epsilon(0.0))
+  call compare(values(i), myeps(i), nit(i), 6*epsilon(0.0))
 end do
 
 contains
Index: fortran/simplify.c
===================================================================
--- fortran/simplify.c	(revision 163461)
+++ fortran/simplify.c	(working copy)
@@ -1237,7 +1237,7 @@  gfc_simplify_bessel_n2 (gfc_expr *order1
       if (jn && n1 == 0)
 	{
 	  e = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
-	  mpfr_set_ui (e->value.real, 1.0, GFC_RND_MODE);
+	  mpfr_set_ui (e->value.real, 1, GFC_RND_MODE);
 	  gfc_constructor_append_expr (&result->value.constructor, e,
 				       &x->where);
 	  n1++;
@@ -1247,7 +1247,7 @@  gfc_simplify_bessel_n2 (gfc_expr *order1
 	{
 	  e = gfc_get_constant_expr (x->ts.type, x->ts.kind, &x->where);
 	  if (jn)
-	    mpfr_set_ui (e->value.real, 0.0, GFC_RND_MODE);
+	    mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
 	  else
 	    mpfr_set_inf (e->value.real, -1);
 	  gfc_constructor_append_expr (&result->value.constructor, e,
@@ -1311,7 +1311,7 @@  gfc_simplify_bessel_n2 (gfc_expr *order1
       return &gfc_bad_expr;
     }
   if (jn)
-     gfc_constructor_insert_expr (&result->value.constructor, e, &x->where, -2);
+    gfc_constructor_insert_expr (&result->value.constructor, e, &x->where, -2);
   else 
     gfc_constructor_append_expr (&result->value.constructor, e, &x->where);