Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 57164:bca027b6df53 2.6
Issue #7070: Fix problem with builtin round function for large odd
integer arguments. Also fixes the sign of round(-0.0).
| author | Mark Dickinson <dickinsm@gmail.com> |
|---|---|
| date | Mon, 09 Nov 2009 17:45:40 +0000 |
| parents | f65d62473465 |
| children | 2628216bc66d |
line wrap: on
line diff
--- a/Python/bltinmodule.c Mon Nov 09 16:47:50 2009 +0000 +++ b/Python/bltinmodule.c Mon Nov 09 17:45:40 2009 +0000 @@ -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
