From: Andreas F. <as...@bo...> - 2004-07-20 19:30:38
|
On 2004-07-19, Christophe Rhodes <cs...@ca...> wrote: > Andreas Fuchs <as...@bo...> writes: >> debugger invoked on a FLOATING-POINT-OVERFLOW in thread 87635: >> arithmetic error FLOATING-POINT-OVERFLOW signalled >> Operation was SCALE-FLOAT, operands (1.0 536870911). > > I'm betting the floating point modes are incorrectly being reset > after taking the ABORT or TOPLEVEL restarts from the debugger. What > happens on the second overflowing call to scale-float? Further calls to scale-float do the same as the first one; You were close, though. Both forms work correctly in a fresh SBCL image. It only fails to load when float.pure.lisp is loaded; I found these three forms to cause the problems I described above (of which the last two are the more interesting): (defmacro raises-error? (form &optional (error-subtype-spec 'error)) `(typep (nth-value 1 (ignore-errors ,form)) ',error-subtype-spec)) (ignore-errors (funcall (fdefinition 'float-radix) "notfloat")) (assert (raises-error? (scale-float 1.0 most-positive-fixnum) floating-point-overflow)) ;;;; another interesting thing is that (float-radix "notfloat") will not be sufficient to trigger the bug; you have to funcall the fdefinition or the symbol 'float-radix, otherwise it appears to work correctly (and scale-float raises the error). Hm, -- Andreas Fuchs, <as...@bo...>, as...@ja..., antifuchs |