dear all,
i have code which looks like:
long double dr;
long double dt;
long double rend;
long double ratio;
long int N;
long unsigned int max_tstep;
ratio = 2.0L;
N = 800;
dr = rend / ((long double)N - 1.0L);
dt = ratio*pow(dr, 2.0L);
max_tstep = (long unsigned int) ceil(endtime / dt);
sometimes ceil(endtime / dt) is very large, like 2.10944e+85. this is too
large even for a long long int. max_tstep overflows.
sometimes i don't catch the overflow, and my program can run for a long
time, producing garbage.
is there some kind of flag that i can check that gets raised when a
calculation overflows? i have many such calculations (which are performed
once at the beginning, so i'm not worried about performance penalty).
i guess i can take a look at limit.h to and compare the maximum long
unsigned int to the value of endtime / dt, but i'd prefer a different
solution if one exists. surely there's got to be SOME way of detecting this
kind of error?
i care not for portability. it's running on a bunch of pentium II, III and
athlon class machines and nothing else. gcc extensions are welcome
(although i took a look and didn't see anything immediately helpful).
the problem is fairly pernicious. normally i would rescale variables, but
for this particular problem, a rescaling simply shifts the problem from one
variable to another.
thanks!
pete
--
"Coffee... I've conquered the Borg on coffee!" [EMAIL PROTECTED]
-- Kathryn Janeway on the virtues of coffee www.dirac.org/p