[Numpy-discussion] bug in round with negative number of decimals

Charles R Harris charlesr.harris at gmail.com
Sun Sep 3 20:18:37 EDT 2006


On 9/3/06, Sebastian Haase <haase at msg.ucsf.edu> wrote:
>
> Hi,
> I just learn about the existence of round().
> Is the following exposing a bug?
> >>> N.__version__
> '1.0b4'
> >>> N.array([65.0])
> [ 65.]
> >>> _.round(-1)
> [ 60.]
> >>> round(65, -1)
> 70.0
> >>> N.array([65])
> [65]
> >>> _.round(-1)
> [60]
> >>> N.array([66])
> [66]
> >>> _.round(-1)
> [60]
> >>> N.array([66.2])
> [ 66.2]
> >>> _.round(-1)
> [ 70.]
>
> 65 should round *up* to 70. (when decimals is given as -1)
> In numpy even 66 rounds down, but 66.2 rounds up ...


Numpy rounds to even.

>>> around(arange(10)*.5)
array([ 0.,  0.,  1.,  2.,  2.,  2.,  3.,  4.,  4.,  4.])

i.e., when at those x.5 boundaries, round to the nearest even number. Always
rounding in the same direction biases the numbers when you have gazillions
of them. This is most likely of import when the fpu is rounding intermediate
results to register length, but numpy does it too. Floats can be weird
anyway, .15, for instance, can't be represented exactly as an ieee float. It
does tend to throw folks for a loop when they don't keep this in mind.

- Sebastian Haase


Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20060903/d5a70ed4/attachment.html>


More information about the NumPy-Discussion mailing list