[R] - round() strange behaviour

(Ted Harding) ted.harding at nessie.mcc.ac.uk
Sun Aug 5 00:53:54 CEST 2007

On 04-Aug-07 21:57:28, John Logsdon wrote:
> I must admit I had never realised this so thanks to Monica for
> raising it.  
> Round-to-even is used for statistical reasons and there is some
> point as it obviously reduces bias. But why should the decision
> be to round to the nearest even number?  rounding to the nearest
> odd number would be equally valid.  (signif(x,0) is the same as
> round(). )

A fair point! But see below.

> There is a debate and sometimes you need symmetric rounding.
> Perhaps there should be an option in round that defaults to
> round-to-even for compatibility but includes the various other
> rounding approaches as seen for example in 
> http://en.wikipedia.org/wiki/Rounding

As wikipedia says: "Round-to-even is used rather than round-to-odd
as the latter rule would prevent rounding to a result of zero."

And there's also stochastic rounding -- toss a penny. But you wouldn't
get the same answer next time.

And I can recall -- man years ago -- being in an environment where
the practice was to round alternately up and down. (These were

John's comparisons between FORTRAN, octave and (implicitly) R
are interesting.

As a general reflection: any method of rounding involves throwing
away some of the information in the data, and this will have
consequences. So the question is: what consequences are you
happiest with?

One consequence of rounding to nearest even (or nearest odd) is
that this can give the worst possible outcome in terms of

(rounded X - rounded Y) compared with (unrounded X - unrounded Y).

For example, rounding to even integer X =1.5 --> 2.0 and
Y = 0.5 --> 0.0 gives

  X - Y = 1.0 , rounded X - rounded Y = 2.0

whereas the difference is 1.0 if you always round up, or always down,
and this is also exactly the difference between the unrounded values..

Rounding to nearest odd would give X = 1.5 --> 1.0, Y = 0.5 --> 1.0
thus difference 0.0 in this case, but again difference 2.0 for
X = 2.5 --> 3.0, Y = 1.5 --> 1.0

And alternate rounding would give either 2.0 or 0.0 depending
on the phase of X and Y.

Thus "always up" or "always down" means that the difference between
rounded numbers is always the same as between the unrounded numbers
which for other methods the differences can differ by 2.0.
This may or may not matter, but it is something to think about
when choosing a rounding method.

> [...]

Best wishes to all,

E-Mail: (Ted Harding) <ted.harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 04-Aug-07                                       Time: 23:53:50
------------------------------ XFMail ------------------------------

More information about the R-help mailing list