Author: guido.van.rossum
Date: Fri Aug 31 02:27:03 2007
New Revision: 57790

Modified:
   python/branches/py3k/Objects/floatobject.c
Log:
Use pow() instead of repeated multiplication by 10 in round(x, n).


Modified: python/branches/py3k/Objects/floatobject.c
==============================================================================
--- python/branches/py3k/Objects/floatobject.c  (original)
+++ python/branches/py3k/Objects/floatobject.c  Fri Aug 31 02:27:03 2007
@@ -771,10 +771,9 @@
 {
 #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 @@
        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 @@
 
        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);
        }
 
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to