Issue #7070: Fix problem with builtin round function for large odd
integer arguments.  Also fixes the sign of round(-0.0).
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 015e16b..87da3c9 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2120,7 +2120,7 @@
 static PyObject *
 builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
 {
-	double number;
+	double number, abs_number, abs_result;
 	double f;
 	int ndigits = 0;
 	int i;
@@ -2137,10 +2137,14 @@
 		number /= f;
 	else
 		number *= f;
-	if (number >= 0.0)
-		number = floor(number + 0.5);
-	else
-		number = ceil(number - 0.5);
+
+	/* round `number` to nearest integer, rounding halves away from zero */
+	abs_number = fabs(number);
+	abs_result = floor(abs_number);
+	if (abs_number - abs_result >= 0.5)
+		abs_result += 1.0;
+	number = copysign(abs_result, number);
+
 	if (ndigits < 0)
 		number *= f;
 	else