+2007-10-01 Micha\e,Ak\e(Bl Cadilhac <michael@cadilhac.name>
+
+ * floatfns.c (Fexpt): Manually check for overflows, so that a power
+ of a non-zero value can't yield zero.
+
2007-09-29 Stefan Monnier <monnier@iro.umontreal.ca>
* term.c (term_clear_mouse_face, term_mouse_highlight)
(arg1, arg2)
register Lisp_Object arg1, arg2;
{
- double f1, f2;
+ double f1, f2, f3;
CHECK_NUMBER_OR_FLOAT (arg1);
CHECK_NUMBER_OR_FLOAT (arg2);
else if ((f1 == 0.0 && f2 < 0.0) || (f1 < 0 && f2 != floor(f2)))
domain_error2 ("expt", arg1, arg2);
#endif
- IN_FLOAT2 (f1 = pow (f1, f2), "expt", arg1, arg2);
- return make_float (f1);
+ IN_FLOAT2 (f3 = pow (f1, f2), "expt", arg1, arg2);
+ /* Check for overflow in the result. */
+ if (f1 != 0.0 && f3 == 0.0)
+ range_error ("expt", arg1);
+ return make_float (f3);
}
DEFUN ("log", Flog, Slog, 1, 2, 0,