Mercurial > cpython-lru_cache-weakref
diff Objects/floatobject.c @ 43104:dd6cf00c1794
Use pow() instead of repeated multiplication by 10 in round(x, n).
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 31 Aug 2007 00:27:03 +0000 |
| parents | 824b9d52e006 |
| children | 727539865f04 |
line wrap: on
line diff
--- a/Objects/floatobject.c Fri Aug 31 00:20:14 2007 +0000 +++ b/Objects/floatobject.c Fri Aug 31 00:27:03 2007 +0000 @@ -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); }
