FYI, the new int64 package on CRAN gets this right, but is of course somewhat slower since it is not doing hardware 64-bit arithmetic.
x <- c(rep(1800000003L, 10000000), -rep(1200000002L, 15000000)) library(int64) sum(as.int64(x)) # [1] 0 - Murray 2011/12/9 Hervé Pagès <hpa...@fhcrc.org>: > Hi, > > x <- c(rep(1800000003L, 10000000), -rep(1200000002L, 15000000)) > > This is correct: > > > sum(as.double(x)) > [1] 0 > > This is not: > > > sum(x) > [1] 4996000 > > Returning NA (with a warning) would also be acceptable for the latter. > That would make it consistent with cumsum(x): > > > cumsum(x)[length(x)] > [1] NA > Warning message: > Integer overflow in 'cumsum'; use 'cumsum(as.numeric(.))' > > Thanks! > H. > >> sessionInfo() > R version 2.14.0 (2011-10-31) > Platform: x86_64-unknown-linux-gnu (64-bit) > > locale: > [1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C > [3] LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8 > [5] LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 > [7] LC_PAPER=C LC_NAME=C > [9] LC_ADDRESS=C LC_TELEPHONE=C > [11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > -- > Hervé Pagès > > Program in Computational Biology > Division of Public Health Sciences > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N, M1-B514 > P.O. Box 19024 > Seattle, WA 98109-1024 > > E-mail: hpa...@fhcrc.org > Phone: (206) 667-5791 > Fax: (206) 667-1319 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel