This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: printf("%0.0f", 0.5) yields unexpected result (0)
- To: Mo McKinlay <mmckinlay at gnu dot org>
- Subject: Re: printf("%0.0f", 0.5) yields unexpected result (0)
- From: Nathan Sidwell <nathan at codesourcery dot com>
- Date: Thu, 17 Aug 2000 17:10:06 +0100
- CC: Horst von Brand <vonbrand at inf dot utfsm dot cl>, Marc Boeren <M dot Boeren at guidance dot nl>, "'gcc-bugs at gcc dot gnu dot org'" <gcc-bugs at gcc dot gnu dot org>
- Organization: Codesourcery LLC
- References: <Pine.LNX.4.21.0008161621160.3235-100000@sphere.man.uk.ekto.org>
Mo McKinlay wrote:
>
> # Round to next even digit if .5, what's strange about that?
>
> I don't know what school you guys went to, but I was always taught to
> round up to the next number, not the next *even* number. I may be being
> incredibly stupid, but where on earth did the ISO committee get this
> behaviour from? I've never heard of next-even-number-rounding before in my
> life :)
Ah, yes round 1/2 up is OK for real numbers, but floating point numbers
are not real numbers. As such, if you rounded up you'd introduce a bias.
Strange as it may seem round to nearest even is better for floats.
Quick example. Suppose the exact results were evenly distributed over the
set of half integers and the representable results were in the set of
integers. Now rounding the 1/2 values up would introduce an average
systematic bias of +1/4 rounding towards nearest even gives an average
bias of zero.
nathan
--
Dr Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
'But that's a lie.' - 'Yes it is. What's your point?'
nathan@codesourcery.com : http://www.cs.bris.ac.uk/~nathan/ : nathan@acm.org