# [R] integer overflow error problem

Spencer Graves spencer.graves at pdf.com
Mon Mar 31 16:31:40 CEST 2003

```As usual, Prof. Ripley helped enlighten the rest of us.  Consider the
following:

> error(cube(as.integer(20)))
 NA
Warning message:
NAs produced by integer overflow in: x * x * x
> error(cube(as.numeric(1:20)))
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Best Regards,
Spencer Graves

ripley at stats.ox.ac.uk wrote:
> 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))
>> 0
>>
>>no problem.   Then:
>>
>>R>  error(cube(1:20))
>>   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.
>

```