]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Use pow() instead of repeated multiplication by 10 in round(x, n).
authorGuido van Rossum <guido@python.org>
Fri, 31 Aug 2007 00:27:03 +0000 (00:27 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 31 Aug 2007 00:27:03 +0000 (00:27 +0000)
Objects/floatobject.c

index f74b19d60c214b96783f4daa18c12083de12294f..c060d8b7576059d11c85dfe0dad9f107851b5a25 100644 (file)
@@ -771,10 +771,9 @@ float_round(PyObject *v, PyObject *args)
 {
 #define UNDEF_NDIGITS (-0x7fffffff) /* Unlikely ndigits value */
        double x;
-       double f;
+       double f = 1.0;
        double flr, cil;
        double rounded;
-       int i;
        int ndigits = UNDEF_NDIGITS;
 
        if (!PyArg_ParseTuple(args, "|i", &ndigits))
@@ -783,14 +782,8 @@ float_round(PyObject *v, PyObject *args)
        x = PyFloat_AsDouble(v);
 
        if (ndigits != UNDEF_NDIGITS) {
-               f = 1.0;
-               i = abs(ndigits);
-               while  (--i >= 0)
-                       f = f*10.0;
-               if (ndigits < 0)
-                       x /= f;
-               else
-                       x *= f;
+               f = pow(10.0, ndigits);
+               x *= f;
        }
 
        flr = floor(x);
@@ -798,16 +791,13 @@ float_round(PyObject *v, PyObject *args)
 
        if (x-flr > 0.5)
                rounded = cil;
-       else if (x-flr == 0.5) 
+       else if (x-flr == 0.5)
                rounded = fmod(flr, 2) == 0 ? flr : cil;
        else
                rounded = flr;
 
        if (ndigits != UNDEF_NDIGITS) {
-               if (ndigits < 0)
-                       rounded *= f;
-               else
-                       rounded /= f;
+               rounded /= f;
                return PyFloat_FromDouble(rounded);
        }