On Tue, 2005-05-31 at 11:11 -0400, Duncan Murdoch wrote: > Marc Schwartz wrote: > > > Final note to Henrik: Note that the IEEE 754 rounding standard as > > implemented in R results in: > > > > > >>round(18.15, 1) > > > > [1] 18.1 > > > >>formatC(18.15, format = "f", digits = 1) > > > > [1] "18.1" > > > >>sprintf("%5.1f", 18.15) > > > > [1] " 18.1" > > > > This is because the rounding method implemented is the "go to the even > > digit" approach. Thus, you don't get 18.2. > > > > See ?round for more information. > > I don't think "go to the even digit" is being applied here: ".1" is not > an even digit. > > I suspect what's going on in this example is that 18.15 is not being > represented exactly; it's stored internally as something slightly less > than that value, so it rounds down. > > You'd see the "go to the even digit" rule applied when rounding 17.5 or > 18.5, which can be represented exactly, being fractions with a power of > 2 in the denominator: > > > round(18.5, 0) > [1] 18 > > round(17.5, 0) > [1] 18 > > (This is very gratifying. Usually when I try to predict the exact > behaviour of round() or signif() I end up having to rewrite my > prediction afterwards. But this time I got it right. Honest!) > > Duncan Murdoch
Duncan, Just got back from a day long meeting. You are indeed correct on the rounding here. If you look at how 18.15 appears when printed with more significant digits: > print(18.15, 20) [1] 18.149999999999998579 That's what I get for trying to deal with floating point representation issues first thing after a three day weekend... ;-) Thanks for the correction. Marc ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html