[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