comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Possible crippling bug in NR_(SIMP,ROMB)
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Possible crippling bug in NR_(SIMP,ROMB) [message #4121] Tue, 02 May 1995 00:00
mhaffner is currently offline  mhaffner
Messages: 2
Registered: February 1995
Junior Member
I get erroneous results when using the NR_SIMP and NR_ROMB routines
recursively that I belive traces to the routines themselves. Here is one
of the simplest routines I could think of to illustrate the problem (the
idea for this recursive calling comes from NR, section 4.6):

=========
FUNCTION myfunc, x
return, 2.0*x
END

FUNCTION innerint, y
return, nr_qromb('myfunc', 0.0, 5.0)
END

PRO simpleint
print, nr_qromb('innerint', 0.0, 2.0)
END
=========

Now, executing a statement like 'print, nr_qromb('myfunc',0.0,5.0)'
correctly returns 25.000. However when adding the extra integral from 0-2
over y as shown above in 'simpleint', IDL returns 37.500 when the correct
answer should be 50. I have run this exact calculation through the C
versions of the NR routines and they correctly report 50.000. I have
checked this on SGI's, Alpha's, and DecStations with the same results.

It seems the recursive calling is mangling the results. (Strangely, using
the y range of 0-3 gives 50!) If I replace the return statment in
'innerint' with 'return, 25.0' I (of course) get 50. As listed above,
'innerint' should be returning 25.000 every call.

Of course the integral above doesn't need to be calculated this way, but I
have some that I need to do using the recursive trick. Has anyone
encountered this before and found a workaround? Am I missing something
obvious about recursive function calling in IDL?

Thanks.

mh
--
Matt Haffner mhaffner@fosters.astro.wisc.edu
Dept. of Astronomy University of Wisconsin, Madison
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Passing > 64Kb arrays to IDL DLL's
Next Topic: Interpolation to fixed points.

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 16:01:07 PDT 2025

Total time taken to generate the page: 0.00664 seconds