diff Objects/floatobject.c @ 19750:35b6a1d0b1e0 legacy-trunk

Rework the way we try to check for libm overflow, given that C99 no longer requires that errno ever get set, and it looks like glibc is already playing that game. New rules: + Never use HUGE_VAL. Use the new Py_HUGE_VAL instead. + Never believe errno. If overflow is the only thing you're interested in, use the new Py_OVERFLOWED(x) macro. If you're interested in any libm errors, use the new Py_SET_ERANGE_IF_OVERFLOW(x) macro, which attempts to set errno the way C89 said it worked. Unfortunately, none of these are reliable, but they work on Windows and I *expect* under glibc too.
author Tim Peters <tim.peters@gmail.com>
date Wed, 05 Sep 2001 22:36:56 +0000
parents cdfdd5359411
children c0580d8c193e
line wrap: on
line diff
--- a/Objects/floatobject.c	Wed Sep 05 22:09:50 2001 +0000
+++ b/Objects/floatobject.c	Wed Sep 05 22:36:56 2001 +0000
@@ -8,21 +8,6 @@
 
 #include <ctype.h>
 
-#ifdef i860
-/* Cray APP has bogus definition of HUGE_VAL in <math.h> */
-#undef HUGE_VAL
-#endif
-
-#if defined(HUGE_VAL) && !defined(CHECK)
-#define CHECK(x) if (errno != 0) ; \
-	else if (-HUGE_VAL <= (x) && (x) <= HUGE_VAL) ; \
-	else errno = ERANGE
-#endif
-
-#ifndef CHECK
-#define CHECK(x) /* Don't know how to check */
-#endif
-
 #if !defined(__STDC__) && !defined(macintosh)
 extern double fmod(double, double);
 extern double pow(double, double);
@@ -535,7 +520,7 @@
 	PyFPE_START_PROTECT("pow", return NULL)
 	ix = pow(iv, iw);
 	PyFPE_END_PROTECT(ix)
-	CHECK(ix);
+	Py_SET_ERANGE_IF_OVERFLOW(ix);
 	if (errno != 0) {
 		/* XXX could it be another type of error? */
 		PyErr_SetFromErrno(PyExc_OverflowError);