Kaydet (Commit) 6deb1bf8 authored tarafından Guido van Rossum's avatar Guido van Rossum

Use pow() instead of repeated multiplication by 10 in round(x, n).

üst 74e68c75
...@@ -771,10 +771,9 @@ float_round(PyObject *v, PyObject *args) ...@@ -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,13 +782,7 @@ float_round(PyObject *v, PyObject *args) ...@@ -783,13 +782,7 @@ 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);
while (--i >= 0)
f = f*10.0;
if (ndigits < 0)
x /= f;
else
x *= f; x *= f;
} }
...@@ -804,9 +797,6 @@ float_round(PyObject *v, PyObject *args) ...@@ -804,9 +797,6 @@ float_round(PyObject *v, PyObject *args)
rounded = flr; rounded = flr;
if (ndigits != UNDEF_NDIGITS) { if (ndigits != UNDEF_NDIGITS) {
if (ndigits < 0)
rounded *= f;
else
rounded /= f; rounded /= f;
return PyFloat_FromDouble(rounded); return PyFloat_FromDouble(rounded);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment