Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Sep 1997 14:20:23 +0200 (MEST)
From:      Christoph Kukulies <kuku@gilberto.physik.RWTH-Aachen.DE>
To:        freebsd-hackers@freefall.FreeBSD.org
Subject:   FPE problem 
Message-ID:  <199709161220.OAA05839@gil.physik.rwth-aachen.de>

next in thread | raw e-mail | index | archive | help

I'm having a weird problem with a f2c program which is causing an FPE
for a reason I cannot figure out.

It happens in a complex expression in a fortran expression
in a scientific (high energy physics) calculation program.

        y=(x-1.D0)/x
        z=-log(1.D0-y)
        z2=z*z
        rsp=z*(1.D0+a1*z*(1.D0+a2*z*(1.D0+a3*z2*(1.D0+a4*z2*
     1 (1.D0+a5*z2*(1.D0+a6*z2*(1.D0+a7*z2*(1.D0+a8*z2*(1.D0+a9*z2*
     2 (1.D0+a10*z2))))))))))
     3 +zeta2-log(x)*log(1.D0-x)+0.5D0*log(x)**2

The corresponding C code (with debugging printf):

	y = 1. - *x;
	z__ = -log(1. - y);
	z2 = z__ * z__;
        printf("z__=%lf\n"
"spint_1.a1=%lf\n"
"spint_1.a2=%lf\n"
"spint_1.a3=%lf\n"
"spint_1.a4=%lf\n"
"spint_1.a5=%lf\n"
"spint_1.a6=%lf\n"
"spint_1.a7=%lf\n"
"spint_1.a8=%lf\n"
"spint_1.a9=%lf\n"
"spint_1.a10=%lf\n"
"spint_1.zeta2=%lf\n"
"z2=%lf\n"
"*x=%lf\n",
        z__,
        spint_1.a1,
        spint_1.a2,
        spint_1.a3,
        spint_1.a4,
        spint_1.a5,
        spint_1.a6,
        spint_1.a7,
        spint_1.a8,
        spint_1.a9,
        spint_1.a10,
        spint_1.zeta2,
        z2,
        *x);
fflush(stdout);

	ret_val = -z__ * (spint_1.a1 * z__ * (spint_1.a2 * z__ * (spint_1.a3 *
		 z2 * (spint_1.a4 * z2 * (spint_1.a5 * z2 * (spint_1.a6 * z2 *
		 (spint_1.a7 * z2 * (spint_1.a8 * z2 * (spint_1.a9 * z2 * (
		spint_1.a10 * z2 + 1.) + 1.) + 1.) + 1.) + 1.) + 1.) + 1.) + 
		1.) + 1.) + 1.) + spint_1.zeta2 + z__ * log(1. - *x);
	return ret_val;

gdb output:
----------

  Nucleon PDFs :  Ngroup =  3,   Nset =  35
 ,  for MRS Set (H) (L230-MSb) Structure Functions
  ----------------------------------------------------------------------------------------------------------------
z__=0.029266
spint_1.a1=-0.250000
spint_1.a2=-0.111111
spint_1.a3=-0.010000
spint_1.a4=-0.017007
spint_1.a5=-0.019444
spint_1.a6=-0.020661
spint_1.a7=-0.021417
spint_1.a8=-0.021949
spint_1.a9=-0.022349
spint_1.a10=-0.022664
spint_1.zeta2=1.644934
z2=0.000857
*x=0.971158

Program received signal SIGFPE, Arithmetic exception.
0x1b420 in rsp_ (x=0xefbfd784) at disent.c:5165
5165            ret_val = -z__ * (spint_1.a1 * z__ * (spint_1.a2 * z__ * (spint_1.a3 *


A small C program fed with the above values evaluates the expression
without problems.

main()
{
   double log(),
   z__=0.029266,
   a1=-0.250000,
   a2=-0.111111,
   a3=-0.010000,
   a4=-0.017007,
   a5=-0.019444,
   a6=-0.020661,
   a7=-0.021417,
   a8=-0.021949,
   a9=-0.022349,
   a10=-0.022664,
   zeta2=1.644934,
   x=0.971158,
   z2,ret_val , 
   y;
   y = 1. - x;
        z__ = -log(1. - y);
        z2 = z__ * z__;

   ret_val = -z__ * (a1 * z__ * (a2 * z__ * (a3 * 
                 z2 * (a4 * z2 * (a5 * z2 * (a6 * z2 * 
                 (a7 * z2 * (a8 * z2 * (a9 * z2 * ( 
                a10 * z2 + 1.) + 1.) + 1.) + 1.) + 1.) + 1.) + 1.) + 
                1.) + 1.) + 1.) + zeta2 + z__ * log(1. - x);
   printf("%lf\n",ret_val);
} 

Any ideas?



-- 
Chris Christoph P. U. Kukulies kuku@gil.physik.rwth-aachen.de




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709161220.OAA05839>