On 28/11/2010 4:20 PM, 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.

This is presumably another version of FAQ 7.31. Very few numbers of the form n/100 are exactly representable in floating point, and the rounding error sometimes shows up when you multiply by 100. A simpler version of this is the following:

> y <- 1:99
> y[(y/100)*100 != y]
[1]  7 14 28 29 55 56 57 58

Duncan Murdoch


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