[R] Zero is not Zero

Neil Klepeis nklepeis at uclink4.berkeley.edu
Thu Oct 31 20:17:30 CET 2002


I have a confusing problem with getting the form `x - trunc(x)' to be 
exactly zero when `x' is an integer. It only seems to occur inside of a 
function.  [R-1.6.0 on Linux/Intel]

I have a function to return the highest precision digit of values in `x':

prec<-function(x){
init <- trunc(log10(max(x)))
y <- x - trunc(x)
while (any(y > 0)) {
   init <- init - 1
   x1 <- x*10^(-init)
   y <- x1 - trunc(x1)
}
10^init
}


The problem is that some y's are not exactly zero as they should be.

Printing out pairs of x1 and y:
[Note the algorithm is finished when all y's are zero]

 > prec(c(1.1, 10, 120.34))
[1]   1.10  10.00 120.34
[1] 0.10 0.00 0.34

[1]  0.110  1.000 12.034
[1] 0.110 0.000 0.034

[1]   1.10  10.00 120.34
[1] 0.10 0.00 0.34

[1]   11.0  100.0 1203.4
[1] 0.0 0.0 0.4

# Here is the strange place where `x1-trunc(x1)' is not quite zero:

[1]   110  1000 12034
[1] 1.421085e-14 0.000000e+00 0.000000e+00

[1]   1100  10000 120340
[1] 0 0 0

# here is the highest precision, except it is *wrong*

[1] 0.001

---

Doing `110 - trunc(110)', of course gives "0" when entered on the R 
command-line directly:

 > 110 - trunc(110)
[1] 0

So where does that 1.421085e-14 come from, and how can I get rid of it?


-- 
______________________________________________________
Neil E. Klepeis, UC Berkeley, School of Public Health,
and Lawrence Berkeley National Laboratory,
Berkeley, CA USA.  Voice: 831-768-9510

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list