mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Use pow() instead of repeated multiplication by 10 in round(x, n).
This commit is contained in:
parent
74e68c751f
commit
6deb1bf83f
1 changed files with 5 additions and 15 deletions
|
@ -771,10 +771,9 @@ float_round(PyObject *v, PyObject *args)
|
||||||
{
|
{
|
||||||
#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
|
#define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
|
||||||
double x;
|
double x;
|
||||||
double f;
|
double f = 1.0;
|
||||||
double flr, cil;
|
double flr, cil;
|
||||||
double rounded;
|
double rounded;
|
||||||
int i;
|
|
||||||
int ndigits = UNDEF_NDIGITS;
|
int ndigits = UNDEF_NDIGITS;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "|i", &ndigits))
|
if (!PyArg_ParseTuple(args, "|i", &ndigits))
|
||||||
|
@ -783,14 +782,8 @@ float_round(PyObject *v, PyObject *args)
|
||||||
x = PyFloat_AsDouble(v);
|
x = PyFloat_AsDouble(v);
|
||||||
|
|
||||||
if (ndigits != UNDEF_NDIGITS) {
|
if (ndigits != UNDEF_NDIGITS) {
|
||||||
f = 1.0;
|
f = pow(10.0, ndigits);
|
||||||
i = abs(ndigits);
|
x *= f;
|
||||||
while (--i >= 0)
|
|
||||||
f = f*10.0;
|
|
||||||
if (ndigits < 0)
|
|
||||||
x /= f;
|
|
||||||
else
|
|
||||||
x *= f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flr = floor(x);
|
flr = floor(x);
|
||||||
|
@ -798,16 +791,13 @@ float_round(PyObject *v, PyObject *args)
|
||||||
|
|
||||||
if (x-flr > 0.5)
|
if (x-flr > 0.5)
|
||||||
rounded = cil;
|
rounded = cil;
|
||||||
else if (x-flr == 0.5)
|
else if (x-flr == 0.5)
|
||||||
rounded = fmod(flr, 2) == 0 ? flr : cil;
|
rounded = fmod(flr, 2) == 0 ? flr : cil;
|
||||||
else
|
else
|
||||||
rounded = flr;
|
rounded = flr;
|
||||||
|
|
||||||
if (ndigits != UNDEF_NDIGITS) {
|
if (ndigits != UNDEF_NDIGITS) {
|
||||||
if (ndigits < 0)
|
rounded /= f;
|
||||||
rounded *= f;
|
|
||||||
else
|
|
||||||
rounded /= f;
|
|
||||||
return PyFloat_FromDouble(rounded);
|
return PyFloat_FromDouble(rounded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue