On Mar 16, 2013, at 11:47 PM, Eric Nadeau <nad...@gmail.com> wrote:

> The point of rounding is coming up with the best possible integer 
> approximation for a decimal and this nearest even number rule does not 
> qualify.

Why not?  In these cases there is no "the" best possible integer approximation, 
but two equally-close integer approximations, so either one would qualify.  In 
fact, choosing one or the other at random would meet the above criterion, but 
would be non-deterministic and annoy a lot of programmers.

> This "logic" was used by my grandparents' generation because odd numbers were 
> seen as less pure than even ones.

I've never heard that "logic".  Citation?

On the contrary, my impression is that our grandparents' generation chose 
"round halves up" because the most common source of decimal numbers that needed 
rounding was long division, which generates decimal digits one at a time.  If 
you generated the first digit after the decimal point and you got a "5", it 
meant the remainder was AT LEAST half of the divisor, but possibly more, so 
rounding halves up meant that you'd never round in the wrong direction, and 
most of the time (1 - 1/divisor) you'd be rounding in the right direction.  
(The remaining 1/divisor of the time would be the "exact half" case in which 
either direction would be equally close.)

In computer arithmetic, by contrast, typically all the bits are generated 
(including guard, round, and sticky bits) before you even think about rounding, 
so you don't need to make your rounding decision based on only the first digit 
after the point.

> I'm ditching Scheme altogether based on this, but thanks all for the good 
> explanations, it can be confirmed by running the following (I thought it was 
> only a fluke with 0.5):
> 
> (round 0.5) (round 1.5) (round 2.5) (round 3.5)

Oh, there's no dispute that it happens consistently.  If it didn't, a bug 
report would be in order.

BTW, before you blame this on Scheme or Racket, see 
http://docs.oracle.com/javase/1.5.0/docs/api/java/math/RoundingMode.html and 
http://en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules


Stephen Bloch
sbl...@adelphi.edu


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to