# [R] a==0 vs as.integer(a)==0 vs all.equal(a,0)

From: Robin Hankin <r.hankin_at_soc.soton.ac.uk>
Date: Tue 08 Mar 2005 - 20:03:43 EST

hi

```      Note that on almost all implementations of R the range of
representable integers is restricted to about +/-2*10^9: 'double's
can hold much larger integers exactly.

```

I am getting very confused as to when to use integers and when not to. In my line
I need exact comparisons of large integer-valued arrays, so I often use as.integer(),
but the above seems to tell me that doubles might be better.

Consider the following R idiom of Euclid's algorithm for the highest common factor
of two positive integers:

gcd <- function(a, b){

```     if (b == 0){ return(a)}
return(Recall(b, a%%b))
```

}

If I call this with gcd(10,12), for example, then a%%b is not an integer, so the first
line of the function, testing b for being zero, isn't legitimate.

OK, so I have some options:

(1) stick in "a <- as.integer(a), b <- as.integer(b)" into the
function: then a%%b *will* be an

```                integer and the "==" test is appropriate

(2) use some test like abs(b) < TOL for some suitable TOL (0.5?)
```
(3) use identical(all.equal(b,0),TRUE) like it says in identical.Rd
(4) use identical(all.equal(b,as.integer(0)),TRUE)

How does the List deal with this kind of problem?

Also, gcd() as written returns a non-integer. Would the List recommend rewriting the last
line as

return(as.integer(Recall(b,a%%b)))

or not?

```--
Robin Hankin
Uncertainty Analyst
Southampton Oceanography Centre
European Way, Southampton SO14 3ZH, UK
tel  023-8059-7743

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help