Patch #871657: Set EDOM for `nan' return values on FreeBSD and OpenBSD.

This fixes a problem that math.sqrt(-1) doesn't raise math.error.
This commit is contained in:
Hye-Shik Chang 2004-03-22 08:43:55 +00:00
parent 39a0f04421
commit 77d9a3effa
2 changed files with 25 additions and 12 deletions

View file

@ -57,7 +57,7 @@ math_1(PyObject *args, double (*func) (double), char *argsfmt)
PyFPE_START_PROTECT("in math_1", return 0)
x = (*func)(x);
PyFPE_END_PROTECT(x)
Py_SET_ERANGE_IF_OVERFLOW(x);
Py_SET_ERRNO_ON_MATH_ERROR(x);
if (errno && is_error(x))
return NULL;
else
@ -74,7 +74,7 @@ math_2(PyObject *args, double (*func) (double, double), char *argsfmt)
PyFPE_START_PROTECT("in math_2", return 0)
x = (*func)(x, y);
PyFPE_END_PROTECT(x)
Py_SET_ERANGE_IF_OVERFLOW(x);
Py_SET_ERRNO_ON_MATH_ERROR(x);
if (errno && is_error(x))
return NULL;
else
@ -143,7 +143,7 @@ math_frexp(PyObject *self, PyObject *args)
return NULL;
errno = 0;
x = frexp(x, &i);
Py_SET_ERANGE_IF_OVERFLOW(x);
Py_SET_ERRNO_ON_MATH_ERROR(x);
if (errno && is_error(x))
return NULL;
else
@ -168,7 +168,7 @@ math_ldexp(PyObject *self, PyObject *args)
PyFPE_START_PROTECT("ldexp", return 0)
x = ldexp(x, exp);
PyFPE_END_PROTECT(x)
Py_SET_ERANGE_IF_OVERFLOW(x);
Py_SET_ERRNO_ON_MATH_ERROR(x);
if (errno && is_error(x))
return NULL;
else
@ -186,7 +186,7 @@ math_modf(PyObject *self, PyObject *args)
return NULL;
errno = 0;
x = modf(x, &y);
Py_SET_ERANGE_IF_OVERFLOW(x);
Py_SET_ERRNO_ON_MATH_ERROR(x);
if (errno && is_error(x))
return NULL;
else