This is the mail archive of the gsl-discuss@sourceware.org mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: cvs version: make check FAIL


On Tuesday 23 May 2006 05:03 pm, Giulio Bottazzi wrote:
> Hi,
> the following is obtained with make check on AMD64
>
> make[2]: Entering directory `/usr/local/gsl/specfunc'
> FAIL: gsl_sf_mathieu_c(0, 10.0, 0.0, &r) [2146]
>   expected: 0.007626517570935782
>   obtained: 0.007626517570935777   1.693427080992244e-18  2.22045e-16
>   fracdiff: 3.411891718287791e-16
>   value/expected not consistent within reported error
>   0.00762651757093577715  1.69342708099224407e-18
[snip additional Mathieu function test failures]

Hi Giulio,

It looks like I set the computed error tolerances too tight for cases 
where the absolute value of the result is less than 1.  I've attached a 
patch to the specfunc directory that works for me.

The Mathieu functions are new to the trunk, and I've only tested on AMD 
Athlon.  Hopefully a thorough testing on multiple architectures will 
identify any additional issues.

Thanks.

    Lowell
-- 
Lowell D. Johnson
Linux:  Bringing stability, security, and freedom to home and business
        computing since 1991.  www.linux.org
Free and Open Source Software:  Of the people, by the people, for the 
people.
Index: mathieu_angfunc.c
===================================================================
RCS file: /cvs/gsl/gsl/specfunc/mathieu_angfunc.c,v
retrieving revision 1.1
diff -u -r1.1 mathieu_angfunc.c
--- mathieu_angfunc.c	18 Apr 2006 17:59:46 -0000	1.1
+++ mathieu_angfunc.c	24 May 2006 01:52:53 -0000
@@ -54,7 +54,9 @@
       fn = cos(order*zz)/norm;
       
       result->val = fn;
-      result->err = GSL_DBL_EPSILON*fabs(fn);
+      result->err = 2.0*GSL_DBL_EPSILON;
+      if (fabs(fn) > 1.0)
+          result->err *= fabs(fn);
       
       return GSL_SUCCESS;
   }
@@ -97,7 +99,9 @@
   fn /= norm;
 
   result->val = fn;
-  result->err = GSL_DBL_EPSILON*fabs(fn);
+  result->err = 2.0*GSL_DBL_EPSILON;
+  if (fabs(fn) > 1.0)
+      result->err *= fabs(fn);
   
   return GSL_SUCCESS;
 }
@@ -126,7 +130,9 @@
       fn = sin(order*zz);
       
       result->val = fn;
-      result->err = GSL_DBL_EPSILON*fabs(fn);
+      result->err = 2.0*GSL_DBL_EPSILON;
+      if (fabs(fn) > 1.0)
+          result->err *= fabs(fn);
       
       return GSL_SUCCESS;
   }
@@ -167,7 +173,9 @@
   fn /= norm;
 
   result->val = fn;
-  result->err = GSL_DBL_EPSILON*fabs(fn);
+  result->err = 2.0*GSL_DBL_EPSILON;
+  if (fabs(fn) > 1.0)
+      result->err *= fabs(fn);
   
   return GSL_SUCCESS;
 }
Index: mathieu_radfunc.c
===================================================================
RCS file: /cvs/gsl/gsl/specfunc/mathieu_radfunc.c,v
retrieving revision 1.1
diff -u -r1.1 mathieu_radfunc.c
--- mathieu_radfunc.c	18 Apr 2006 17:59:46 -0000	1.1
+++ mathieu_radfunc.c	24 May 2006 01:52:54 -0000
@@ -141,7 +141,9 @@
   }
 
   result->val = fn;
-  result->err = GSL_DBL_EPSILON*fabs(fn);
+  result->err = 2.0*GSL_DBL_EPSILON;
+  if (fabs(fn) > 1.0)
+      result->err *= fabs(fn);
   
   return GSL_SUCCESS;
 }
@@ -268,7 +270,9 @@
   }
 
   result->val = fn;
-  result->err = GSL_DBL_EPSILON*fabs(fn);
+  result->err = 2.0*GSL_DBL_EPSILON;
+  if (fabs(fn) > 1.0)
+      result->err *= fabs(fn);
   
   return GSL_SUCCESS;
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]