SGI
From: alison@c255.ucsf.EDU (ABoeckmann)
Subject: SGI
Date: 15 Oct 1997 15:31:13 -0400
Ferdie,
Thanks for your very interesting tip on controlling system actions after FPE. I did not quite understand your email. You say you used
set env TRAP_FPE "ALL=COUNT; UNDERFLOW=0;
OVERFLOW=ABORT;DEVZERO=ABORT;INVALID=0"
Did the computer then stop immediately with the FPE, avoiding the infinite loop (which can occur when the objective function is set to NaN), or did it continue to an apparently successful termination?
Are you saing that 0**POWER was the source of the FPE, and that the little fix in your email didn't help? If so, maybe your code was trying to compute X**POWER with X < -1, and this could be caused by some modelling error. I don't think internal rounding had anything to do with the situation.
The above "set env" is unique to the SGI platform, but I can guess what it is saying. Everything looks ok, except that I am worried about INVALID=0.
It seems as if this might set 0**POWER to 0, but it might also set (neg)**POWER to 0, or LOG(0) to 0, or SQRT(neg) to 0, which is not a good idea. I think INVALID=ABORT is a better choice, if this means what I think it means ("stop immediately if an invalid operation is attempted.")
I'd really like to see your control stream and try running it here to find out exactly where the FPE occurs, and whether it is appropriate to set the result to 0.
Even though some FPE's are benign, it would be best if the computers always stopped when they occur, as do the INTEL systems. In general, it is better to fix the data and/or abbreviated code to avoid FPE's (other than underflow, which is normal in NONMEM and should always result in 0).