mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
bpo-39310: Add math.ulp(x) (GH-17965)
Add math.ulp(): return the value of the least significant bit of a float.
This commit is contained in:
parent
7ba6f18de2
commit
0b2ab21956
7 changed files with 144 additions and 37 deletions
|
@ -3314,6 +3314,37 @@ math_nextafter_impl(PyObject *module, double x, double y)
|
|||
}
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
math.ulp -> double
|
||||
|
||||
x: double
|
||||
/
|
||||
|
||||
Return the value of the least significant bit of the float x.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static double
|
||||
math_ulp_impl(PyObject *module, double x)
|
||||
/*[clinic end generated code: output=f5207867a9384dd4 input=31f9bfbbe373fcaa]*/
|
||||
{
|
||||
if (Py_IS_NAN(x)) {
|
||||
return x;
|
||||
}
|
||||
x = fabs(x);
|
||||
if (Py_IS_INFINITY(x)) {
|
||||
return x;
|
||||
}
|
||||
double inf = m_inf();
|
||||
double x2 = nextafter(x, inf);
|
||||
if (Py_IS_INFINITY(x2)) {
|
||||
/* special case: x is the largest positive representable float */
|
||||
x2 = nextafter(x, -inf);
|
||||
return x - x2;
|
||||
}
|
||||
return x2 - x;
|
||||
}
|
||||
|
||||
|
||||
static PyMethodDef math_methods[] = {
|
||||
{"acos", math_acos, METH_O, math_acos_doc},
|
||||
{"acosh", math_acosh, METH_O, math_acosh_doc},
|
||||
|
@ -3366,6 +3397,7 @@ static PyMethodDef math_methods[] = {
|
|||
MATH_PERM_METHODDEF
|
||||
MATH_COMB_METHODDEF
|
||||
MATH_NEXTAFTER_METHODDEF
|
||||
MATH_ULP_METHODDEF
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue