Skip to content

Commit

Permalink
On path with known exact float, extract the double with the fast macr…
Browse files Browse the repository at this point in the history
  • Loading branch information
rhettinger authored and fasihahmad committed Jun 29, 2020
1 parent 569a16e commit 321eab5
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions Modules/mathmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1256,9 +1256,15 @@ static PyObject *
math_floor(PyObject *module, PyObject *number)
/*[clinic end generated code: output=c6a65c4884884b8a input=63af6b5d7ebcc3d6]*/
{
double x;

_Py_IDENTIFIER(__floor__);

if (!PyFloat_CheckExact(number)) {
if (PyFloat_CheckExact(number)) {
x = PyFloat_AS_DOUBLE(number);
}
else
{
PyObject *method = _PyObject_LookupSpecial(number, &PyId___floor__);
if (method != NULL) {
PyObject *result = _PyObject_CallNoArg(method);
Expand All @@ -1267,11 +1273,10 @@ math_floor(PyObject *module, PyObject *number)
}
if (PyErr_Occurred())
return NULL;
x = PyFloat_AsDouble(number);
if (x == -1.0 && PyErr_Occurred())
return NULL;
}
double x = PyFloat_AsDouble(number);
if (x == -1.0 && PyErr_Occurred())
return NULL;

return PyLong_FromDouble(floor(x));
}

Expand Down

0 comments on commit 321eab5

Please sign in to comment.