MANAGER@SKIDMORE.BITNET (Leo Geoffrion) (10/21/87)
I believe that I've stumbled onto a bug in the EXP() function -- used to calculate e raised to the x power -- We first encountered it when a FORTRAN simulation that ran last semester now refused to converge on a solution. After much hacking with the debugger we found incorrect behavior in the EXP(X) predeclared function in FORTRAN. In order to check whether the problem might lie in FORTRAN, I quickly created a test program in Pascal involving the same EXP(x) function. Here's the program... ----------------------------------- TY EXP.PAS PROGRAM EXP(INPUT,OUTPUT); VAR NUM, INIT, END_VALUE,STEP_SIZE,N : REAL; BEGIN WRITE('ENTER INITIAL VALUE '); READ(INIT); WRITE('ENTER STEP SIZE '); READ (STEP_SIZE); WRITE('ENTER FINAL VALUE '); READ (END_VALUE); NUM := INIT; REPEAT BEGIN N := EXP(NUM); WRITELN (NUM, N ); NUM := NUM + STEP_SIZE; END UNTIL NUM > END_VALUE; END. --------------------------------- Now, when I run it, watch what happens to EXP(-1.168) --------------------------------- $ RUN EXP ENTER INITIAL VALUE -1.180 ENTER STEP SIZE 0.002 ENTER FINAL VALUE -1.160 -1.18000E+00 3.13683E-01 -1.17800E+00 3.13056E-01 -1.17600E+00 3.12431E-01 -1.17400E+00 3.11807E-01 -1.17200E+00 3.11184E-01 -1.17000E+00 3.10562E-01 <== WHY THE DISCONTINUITY HERE?? -1.16800E+00 3.37994E-01 -1.16600E+00 3.37318E-01 -1.16400E+00 3.36644E-01 -1.16200E+00 3.35972E-01 -1.16000E+00 3.35300E-01 My handy, but primitive, HP calculator confirms that e**-1.168 is *NOT* .338, but rather, .31, which is in logical progression with the preceding values. Incidentally, I tried setting all variables to double precision in order to see if that might solve the problem. That does not eliminate the discontinuity -- just does it to more decimal places. Is it possible that there's a bug in how RTL computes e**x, or am I just a) hallucinating b) mathematically naive If a bug, how can we force e**x to return the correct values. The discontinuity is just enough to prevent our model from converging on a value, since the interation is taking place in the vicinity of x = -1.17. =================================================================== Leo D. Geoffrion BITNET: MANAGER@SKIDMORE.BITNET Associate Director for NYNEX: (518) 584-5000 Ext. 2628 Academic Computing Skidmore College Saratoga Springs, NY 12866