From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>

Date: Tue 08 Mar 2005 - 21:42:29 EST

Date: Tue 08 Mar 2005 - 21:42:29 EST

On Tue, 8 Mar 2005, Duncan Murdoch wrote:

> On Tue, 8 Mar 2005 09:03:43 +0000, Robin Hankin

*> <r.hankin@soc.soton.ac.uk> wrote :
**>
**>> 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.
**>
**> When you say it isn't legitimate, you mean that it violates the advice
**> never to use exact comparison on floating point values?
**>
**> I think that's just advice, it's not a hard and fast rule. If you
**> happen to know that the values being compared have been calculated and
**> stored exactly, then "==" is valid. In your function, when a and b
**> are integers that are within some range (I'm not sure what it is, but
**> it approaches +/- 2^53), the %% operator should return exact results.
**> (Does it do so on all platforms? I'm not sure, but I'd call it a bug
**> if it didn't unless a and/or b were very close to the upper limit of
**> exactly representable integers.)
*

It is supposed to do so up to (but not including) .Machine$double.base ^ .Machine$double.digits, normally 2^53, irrespective of sign. (These are computed at run-time, so one can be pretty confident about them, at least if your FPU is bug-free.)

> Do you know of examples where a and b are integers stored in floating

*> point, and a %% b returns a value that is different from as.integer(a)
**> %% as.integer(b)?
*

Yes (see the NEWS for R-devel), but only for large integers where the second is NA.

-- Brian D. Ripley, ripley@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 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.htmlReceived on Tue Mar 08 21:46:22 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:30:41 EST
*