[R] integer overflow error problem 
    ripley@stats.ox.ac.uk 
    ripley at stats.ox.ac.uk
       
    Mon Mar 31 08:06:36 CEST 2003
    
    
  
On Mon, 31 Mar 2003, Robin Hankin wrote:
> Try the following simple set of functions (R-1.6.1):
> 
>  square <- function(x){x*x}
>  cube <- function(x) {x*x*x}
>  f1 <- function(x){square(x)*(x+1)}
>  f2 <- function(x){square(x)+cube(x)}
>  error <- function(x){f1(x)-f2(x)}
> 
> [see how f1() and f2() are algebraically identical].  Then:
> 
> R>  error(cube(20))
> [1] 0
> > 
> 
> no problem.   Then:
> 
> R>  error(cube(1:20))
>  [1]  0  0  0  0  0  0  0  0  0  0 NA NA NA NA NA NA NA NA NA NA
> Warning message: 
> NAs produced by integer overflow in: x * x * x 
> 
> 
> See how error() fails for the vector but not for the single number
> argument.  Is R being reasonable here?
Yes, but is the user being reasonable here?
20 is double
1:20 is integer.
and if you give an integer argument you get integer arithmetic.
Note that R did not `fail': it returned a sensible answer and gave a 
warning.
Programmers do need to know about representation issues, and this is a 
programming task.  Don't expect computers to be able to hold arbitrarily 
large numbers exactly.
-- 
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 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595
    
    
More information about the R-help
mailing list