[R] [External] Funky calculations

Nathan Boeger nboeger @end|ng |rom gm@||@com
Wed Feb 2 04:00:44 CET 2022


Thank you for this explanation!

I have a long background in C/C++ and never realized this was such an issue
with some languages. At least, with trivial single digit decimals. I
understand accuracy issues with very large decimals, repeating or
non-terminating rationals and I have handled them in the past. It makes me
worried about all the R scripts I have written before (yikes!).

Cheers

-nb

On Wed, 2 Feb 2022 at 02:44, Richard M. Heiberger <rmh using temple.edu> wrote:

> RShowDoc('FAQ')
>
> then search for 7.31
>
>
> This statement
> "If you stop at a 5 or 7 or 8 and back up to the previous digit, you round
> up. Else you leave the previous result alone."
> is not quite right.  The recommendation in IEEE 754, and this is how R
> does arithmetic, is to Round Even.
>
> I ilustrate here with decimal, even though R and other programs use binary.
>
> > x <- c(1.4, 1.5, 1.6, 2.4, 2.5, 2.6, 3.4, 3.5, 3.6, 4.4, 4.5, 4.6)
> > r <- round(x)
> > cbind(x, r)
>         x r
>  [1,] 1.4 1
>  [2,] 1.5 2
>  [3,] 1.6 2
>  [4,] 2.4 2
>  [5,] 2.5 2
>  [6,] 2.6 3
>  [7,] 3.4 3
>  [8,] 3.5 4
>  [9,] 3.6 4
> [10,] 4.4 4
> [11,] 4.5 4
> [12,] 4.6 5
> >
>
> Numbers whose last digit is not 5 (when in decimal) round to the nearest
> integer.
> Numbers who last digit is 5 (1.5, 2.5, 3.5, 4.5 above)
> round to the nearest EVEN integer.
> Hence 1.5 and 3.5 round up to the even numbers 2 and 4.
> 2.5 and 4.5 round down do the even numbers 2 and 4.
>
> This way the round ups and downs average out to 0.  If we always went up
> from .5 we would have
> an updrift over time.
>
> For even more detail click on the link in FAQ 7.31 to my appendix
> https:// link.springer.com/content/pdf/bbm%3A978-1-4939-2122-5%2F1.pdf
> and search for "Appendix G".
>
> Section G.5 explains Round to Even.
> Sections G.6 onward illustrate specific examples, such as the one that
> started this email thread.
>
> Rich

	[[alternative HTML version deleted]]



More information about the R-help mailing list