hi
?integer says:
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?