On path with known exact float, extract the double with the fast macro. (GH-21072)
(cherry picked from commit 930f4518ae
)
Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
This commit is contained in:
parent
e92219d8f8
commit
242eac1f04
|
@ -1255,9 +1255,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);
|
||||
|
@ -1266,11 +1272,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));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue