Issue #29282: add fused multiply-add function, math.fma.

This commit is contained in:
Mark Dickinson 2017-01-21 12:35:30 +00:00
parent 502efda10c
commit d1b230e48b
6 changed files with 338 additions and 1 deletions

View file

@ -80,6 +80,40 @@ PyDoc_STRVAR(math_factorial__doc__,
#define MATH_FACTORIAL_METHODDEF \
{"factorial", (PyCFunction)math_factorial, METH_O, math_factorial__doc__},
PyDoc_STRVAR(math_fma__doc__,
"fma($module, x, y, z, /)\n"
"--\n"
"\n"
"Fused multiply-add operation. Compute (x * y) + z with a single round.");
#define MATH_FMA_METHODDEF \
{"fma", (PyCFunction)math_fma, METH_FASTCALL, math_fma__doc__},
static PyObject *
math_fma_impl(PyObject *module, double x, double y, double z);
static PyObject *
math_fma(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{
PyObject *return_value = NULL;
double x;
double y;
double z;
if (!_PyArg_ParseStack(args, nargs, "ddd:fma",
&x, &y, &z)) {
goto exit;
}
if (!_PyArg_NoStackKeywords("fma", kwnames)) {
goto exit;
}
return_value = math_fma_impl(module, x, y, z);
exit:
return return_value;
}
PyDoc_STRVAR(math_trunc__doc__,
"trunc($module, x, /)\n"
"--\n"
@ -536,4 +570,4 @@ math_isclose(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwna
exit:
return return_value;
}
/*[clinic end generated code: output=71806f73a5c4bf0b input=a9049054013a1b77]*/
/*[clinic end generated code: output=f428e1075d00c334 input=a9049054013a1b77]*/