[R] cumsum vs. sum
Martin Maechler
maechler at stat.math.ethz.ch
Wed Feb 18 14:03:24 CET 2009
>>>>> "GaGr" == Gabor Grothendieck <ggrothendieck at gmail.com>
>>>>> on Tue, 17 Feb 2009 20:53:18 -0500 writes:
GaGr> Check out sum.exact and cumsum.exact in the caTools package.
>> library(caTools)
GaGr> Loading required package: bitops
>> x <- 1/(12:14)
>> sum(x) - cumsum(x)[3]
GaGr> [1] 2.775558e-17
>> sum.exact(x) - cumsum.exact(x)[3]
GaGr> [1] 0
[ buuh, humbug! ]
The 'NEWS' for R-devel (to become R 2.9.0 in April)
has the following entry
o cumsum(x) and cumprod(x) for double precision x now use a long
double accumulator where available and so more closely match
sum() and prod() in potentially being more accurate.
and indeed, in R-devel,
sum(x) - cumsum(x)[length(x)]
gives 0 for your example.
Martin Maechler, ETH Zurich and R-core team
GaGr> On Tue, Feb 17, 2009 at 5:12 PM, Stavros Macrakis <macrakis at alum.mit.edu> wrote:
>> I recently traced a bug of mine to the fact that cumsum(s)[length(s)]
>> is not always exactly equal to sum(s).
>>
>> For example,
>>
>> x<-1/(12:14)
>> sum(x) - cumsum(x)[3] => 2.8e-17
>>
>> Floating-point addition is of course not exact, and in particular is
>> not associative, so there are various possible reasons for this.
>> Perhaps sum uses clever summing tricks to get more accurate results?
>> In some quick experiments, it does seem to get more accurate results
>> than cumsum.
>>
>> It might be worth documenting.
>>
>> -s
More information about the R-help
mailing list