This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [Patch,Fortran,committed] PR 45367/36158 - Increase numeric tolerance in bessel_{6,7}.f90
- From: Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- To: Tobias Burnus <burnus at net-b dot de>
- Cc: gcc patches <gcc-patches at gcc dot gnu dot org>, gfortran <fortran at gcc dot gnu dot org>
- Date: Sun, 22 Aug 2010 14:17:00 -0700
- Subject: Re: [Patch,Fortran,committed] PR 45367/36158 - Increase numeric tolerance in bessel_{6,7}.f90
- References: <4C70F41C.8050801@net-b.de> <4C712EF2.4020404@net-b.de>
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.
--
Steve
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);