From: Guido van Rossum Date: Fri, 31 Aug 2007 00:27:03 +0000 (+0000) Subject: Use pow() instead of repeated multiplication by 10 in round(x, n). X-Git-Tag: v3.0a1~46 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6deb1bf83f93fc4d0b2433b94a28293e0ae6bc90;p=thirdparty%2FPython%2Fcpython.git Use pow() instead of repeated multiplication by 10 in round(x, n). --- diff --git a/Objects/floatobject.c b/Objects/floatobject.c index f74b19d60c21..c060d8b75760 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -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); }