[vox-tech] help with signals and C
Peter Jay Salzman
vox-tech@lists.lugod.org
Thu, 14 Mar 2002 00:23:07 -0800
begin Mark K. Kim <markslist@cbreak.org>
> keywords: signal, signals, SIGFPE, floating point numbers, inf, nan
> keywords: divide-by-zero, round-off error
>
> Pete,
>
> Your test program works if you do an integer division, but not for
> floating point division. I think I read on one of Jeff's links that
> SIGFPE isn't just for floating point numbers, so perhaps division by zero
> is caught only for integer division on x86.
hi mark,
yeah, i read about this in jeff's 1st link. i'm not really doing much
integer stuff, so it wasn't an issue and i didn't check it. interesting
that integer divide by zero gets caught!
> I'm not sure what kind of errors your program would have if it's not
> generating "inf" or "nan". If you're getting calculations errors, I think
> you're getting floating point round-off errors, rather than
> overflow/underflow. If that's the case, you'd need a higher precision
> numbers (double, long double, or the arbitrary-precision numbers
> library...)
example:
temperature = 1.0
trials Energy per site
1,000 -2.000000
10,000 -1.998448
100,000 -1.997171
1,000,000 -1.997530
10,000,000 -1.997312 <-- very close
100,000,000 -14.163610 <-- very not correct
> One more thing - If you have a really big number plus a really small
> number, the smaller number gets thrown out.
yeah, i know. the details are actually outlined in float.h where alot
of limits of computation are given, like the max normalized double, max
integer N such that 2.0^N is a normalized long double, etc.
> In that case, you'll need a
> really high precision number type that can span across the big and the
> small number to avoid the round-off error. If you have this type of
> problem, and if you can't use the high-enough precision number type
> (either because you don't have one available or it's too slow), there's no
> way around it except rewriting the code.
mark, did you mention arbitrary precision library? just out of
curiosity, what is it called?
pete