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.