From b2f70902395a56fce14f47b685eb4966ec09257e Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 20 Apr 2008 01:39:24 +0000 Subject: [PATCH] FreeBSD doesn't follow C99 for modf(inf); so add explicit special-value handling to math.modf code. --- Modules/mathmodule.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index bb97a2c102..0e91f8fd6a 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -341,6 +341,15 @@ math_modf(PyObject *self, PyObject *arg) double y, x = PyFloat_AsDouble(arg); if (x == -1.0 && PyErr_Occurred()) return NULL; + /* some platforms don't do the right thing for NaNs and + infinities, so we take care of special cases directly. */ + if (!Py_IS_FINITE(x)) { + if (Py_IS_INFINITY(x)) + return Py_BuildValue("(dd)", copysign(0., x), x); + else if (Py_IS_NAN(x)) + return Py_BuildValue("(dd)", x, x); + } + errno = 0; PyFPE_START_PROTECT("in math_modf", return 0); x = modf(x, &y); -- 2.40.0