FAQ 7.31

http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f

You find it odd that the result is not an integer, while I find the fact that your calculation actually works reliably with any number of digits surprising, and you should avoid assuming such behavior will continue in the future. Multiply by the appropriate range and THEN take the integer part.

Patient: Doctor, it hurts when I ram my head into the wall!
Doctor: Don't do that!

Cory Rieth wrote:
Hello!

I stumbled upon something odd that took a while to track down, and I wanted to 
run it by here to see if I should submit a bug report. For randomly generated 
numbers (from a variety of distributions) rounding them to specifically 2 
digits and then multiplying them by 100 produces strange results on about 8% of 
cases. The problematic numbers display as I would have expected, but do not 
logically match the as.integer counterpart (additionally they will not be used 
correctly by functions such as rep()). I realize there are easy workarounds, 
but I wouldn't have expected this result, and it only occurs rounding to 2 
decimals, i.e. changing digits to 3 and multiplying by 1000 after rounding 
gives the expected result.

x<-runif(100)                                #generate some random numbers
y<-round(x,digits=2)*100  #round them all to two decimals, then multiply them 
all by 100. I expected the results to all be integers
sum(y!=as.integer(y))           #but on about 8% of the numbers they do not 
match the integer version
x[which(y!=as.integer(y))]      # a list of the problem numbers from the 
original distribution. They seem to be more common but not exclusive to .54 to 
.57
y[which(y!=as.integer(y))]  #the numbers still display as would be expected, 
i.e. they are integers
as.integer(y[which(y!=as.integer(y))])  # and sometimes display as the same 
number they are not logically identical to

Thanks, and sorry if I came across something that is known, or it is meant to behave this way, I couldn't find anything.
Cory Rieth

R.version() output:
platform x86_64-apple-darwin9.8.0 arch x86_64 os darwin9.8.0 system x86_64, darwin9.8.0 status major 2 minor 12.0 year 2010 month 10 day 15 svn rev 53317 language R version.string R version 2.12.0 (2010-10-15)
______________________________________________
R-help@r-project.org mailing list
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.


______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to