as.character on OS X tiger
This is just a question of rounding error. You are computing 11/999, which is not exactly representable. Most computers use IEC60559 arithmetic, which gives a precision of .Machine$double.eps ~ 2e-16. So you can expect rounding error around 11/999 * .Machine$double.eps ~ 2e-18. However, as.character is documented to represent the number to 15 significant digits. On all of Linux (i686 and AMD64), Solaris and Windows boxes I get
a <- 11/999 b <- as.numeric(as.character(a)) b
[1] 0.01101101
a - b
[1] 1.040834e-17
as.character(a)
[1] "0.0110110110110110"
as.character(b)
[1] "0.011011011011011" and these are different representations of different numbers. So your claim to get different results on `linux' is not one I can reproduce. The fix is not to rely on the fine details of numerical (or character) representations of numbers: perhaps convert them back to numbers and use all.equal()?
On Fri, 23 Sep 2005, Marcus Davy wrote:
Hi, When I run this example code on a G5 the last digit is dropped off on a binary installation of R (R.app), whereas on a linux machine the digit is not removed. # Code: a <- seq(0,1, length=1000)[12] a as.character(a) as.character(as.numeric(as.character(a))) # Results I get: a <- seq(0,1, length=1000)[12]
a
[1] 0.01101101
as.character(a)
[1] "0.0110110110110110"
as.character(as.numeric(as.character(a)))
[1] "0.011011011011011" Can anyone enlighten me on the subtle difference between OS's, its causing issues for me when I write to list elements with these characters strings and some occasionally have lost the last "0".
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595