[R] unexpected behavior using round to 2 digits on randomly generated numbers

Cory Rieth crieth at ucsd.edu
Sun Nov 28 22:20:40 CET 2010


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          
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)

More information about the R-help mailing list