I apologize if my tone came across wrong. I enjoy reading your comments on this list.
My goal was to describe what the IEEE and R interpret "careful coding" to be. > On Feb 01, 2022, at 20:42, Avi Gross <avigr...@verizon.net> wrote: > > Richard, > > I think it was fairly clear I was explaining how people do arithmetic > manually and often truncate or round to some number of decimal places. I said > nothing about what R does or what the IEEE standards say and I do not > particularly care when making MY point. > > My point is that humans before computers also had trouble writing down any > decimals that continue indefinitely. It cannot be expected computer versions > of arithmetic can do much better. Different people can opt to do the > calculation with the same or different numbers of digits ad when compared to > each other they may not match. > > I do care what it does in my programs, of course. My goal here was to explain > to someone that the anomaly found was not really an anomaly and that careful > coding may be required in these situations. > > > -----Original Message----- > From: Richard M. Heiberger <r...@temple.edu> > To: Avi Gross <avigr...@verizon.net> > Cc: Nathan Boeger <nboe...@gmail.com>; r-help@r-project.org > <r-help@r-project.org> > Sent: Tue, Feb 1, 2022 2:44 pm > Subject: Re: [External] [R] Funky calculations > > > 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 > ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.