[R] seq() in 0.62.4 and 0.63

Prof Brian D Ripley ripley at stats.ox.ac.uk
Sat Nov 14 09:04:34 CET 1998


Solaris 2.6, R Version 0.63.0  (November 14, 1998)
               Version 0.62.4  (October 24, 1998)

> seq(0.15, 0.70, 0.05)
 [1] 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65

The much reviled (on r-help) 0.62.3 got such simple cases right (even if
0.62.1 did not). 

Jim Lindsey insisted that such bugs are reported here, so I am.  And yes,
this is a real example and leads to an incorrect analysis of the dataset in
question. 

The problem is the lines

                            if (by > 0) 
                                    while (from + n * by > to) n <- n - 1
                            else while (from + n * by < to) n <- n - 1

One should try to avoid exact comparisons on floating-point quantities.
Given the work above to choose a suitable tolerance, we can attach a
tolerance here, say

      if (by > 0)  while (from + n * (1 - eps) * by > to) n <- n - 1
      else         while (from + n * (1 - eps) * by < to) n <- n - 1   

although I suspect eps is actually rather too small for safety (I would
suggest 10 x machine precision to allow for a number of lfoating point
operations).

However, I think there is a much simpler approach:

	    n <- as.integer(n + 0.1) # make sure n is not too small
            tol <- abs(to - from) * 10 * .Machine$double.eps
	    if(by > 0)	while(from + n*by > to + tol) n <- n - 1
	    else	while(from + n*by < to - tol) n <- n - 1


Brian

-- 
Brian D. Ripley,                  ripley at 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 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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