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);
 	}