On Tue, Aug 23, 2011 at 8:17 PM, Daniel Lai <dan...@bccrc.ca> wrote:
> Greetings all,
>
> I'm porting an algorithm from MATLAB to R, and noticed some minor
> discrepancies in small decimal values using rowSums and colSums which are
> exacerbated after heavy iteration and log space transformation. This was
> rather perplexing as both programs claimed and appeared to use the IEEE 754
> standard for floating point arithmetic (confirmed with manual basic
> operations).  After some tracing and testing, I've managed to isolated a
> minimal working example as follows:
>
> a = 0.812672
> b = 0.916541
> c = 0.797810
> sum(c(a, b, c)) == (a + b + c)
> [1] FALSE

 Its probably to do with the order of summations. With your a,b,c you get:

 > (a+b+c) == (c+b+a)
 [1] TRUE
 > (a+b+c) == (c+a+b)
 [1] FALSE

shock horror, addition is not associative[1]. Lets investigate:

 > sum(c(a,b,c)) == c+a+b
 [1] TRUE
 > sum(c(a,b,c)) == a+c+b
 [1] TRUE

 'sum' seems to get the same answer as adding the first and the third,
then adding the second - explicitly:

 > sum(c(a,b,c)) == (a+c)+b
 [1] TRUE

I'm not sure what it would do for four values in the sum. Have fun
finding out. Does matlab similarly have a+b+c != c+b+a?

Barry

[1] or commutative or distributive or one of those -ives you learn one
day in school. Too lazy to wikipedia it right now...

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to