[Rd] sum overflow (PR#1091)

Prof Brian Ripley ripley@stats.ox.ac.uk
Thu, 13 Sep 2001 09:53:56 +0100 (BST)


It's not a problem with sum:

> sum(a*a)
[1] 333833500
> sum(b*b)
[1] 333833500

are accurate.

The overflow is in the integer arithmetic for *.  That's a question for
your C run-time system.  On a 64-bit machine you might get different
results (although most use 32-bit ints, including mine).

If you use integers you need to be aware of the consequences.  It's a
feature not a bug.


On Thu, 13 Sep 2001 wsi@gcal.ac.uk wrote:

> Full_Name: Bill Simpson
> Version: 1.2.3
> OS: linux
> Submission from: (NULL) (193.62.250.209)
>
>
> I think I have found an accuracy problem with sum()
>
> > a<-1:1000
> > b<-1:1000
> >
> > crossprod(a,a)*crossprod(b,b)
>              [,1]
> [1,] 1.114448e+17
> > drop(.Last.value)
> [1] 1.114448e+17
> >
> #this should give same answer as above
> > sum(a*a)*sum(b*b)
> [1] -652010736
> #seems to be due to sum using integer representation which overflows instead of
> using
> #double representation
>
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-devel 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-devel-request@stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
>

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

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._