[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Locate an underflow
Craig Markwardt wrote:
>
> Paul van Delst <paul.vandelst@noaa.gov> writes:
>
> > Hmm. I do see your point, but if I grab someone else's code (not
> > just IDL code BTW) the first thing I do is run their supplied test
> > case (I hope there is one) with all warning flags on (for IDL,
> > !EXCEPT = 2; for Fortran or similar, set the platform specific
> > compiler switch to trap under/overflows, divide by zero, etc.).
> >
> > If, on running said code, I get a crapload of underflow errors, it's
> > an indication that that either a) the code hasn't been tested very
> > well or b) the programmer didn't really think about the problem
> > enough (and I'm guilty of both of these.... most of the time
> > actually). If there are (usually harmelss) underflow errors, how do
> > I know that there won't be other more serious errors at some point
> > for different input?
>
> Yah, but consider the difference between the following bits of code:
>
> 1> y = exp(-x^2)
>
> 2> u = x^2
> 2> sz = size(x)
> 2> isdouble = sz(sz(0)+1) EQ 5
> 2> mask = u LT alog(machar(double=isdouble).xmax)
> 2> y = mask*exp(-u*mask)
>
> Both sets of code accomplish the same thing, computing a gaussian
> function, except the second one avoids bogus underflow error messages.
> Which one do you think I'd rather write? :-)
The one that avoids errors? :o)
> Which one shows the original mathematical intent more ?
If the code is commented I fail to see the problem. Really. How about
y = gaussian_function( x )
which encapsulates all the checking? (Prefixed with the original author's initials of
course to avoid namespace collisions... :o)
To be fair, the entire debate has no meaning without some context. I agree with you (and
William Thompson) completely for "regular" stuff - you know, the day to day computing that
everyone does. However, for applications (e.g. flight control software, numerical weather
prediction, etc.) upon which a lot more is at stake (e.g. lives, property damage, etc) I
think it's worth the extra (not much more) effort. And when you've done it once, you just
re-use the same function/routine/procedure/whatever.
paulv
--
Paul van Delst A little learning is a dangerous thing;
CIMSS @ NOAA/NCEP Drink deep, or taste not the Pierian spring;
Ph: (301)763-8000 x7274 There shallow draughts intoxicate the brain,
Fax:(301)763-8545 And drinking largely sobers us again.
Alexander Pope.