> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> On Behalf Of Talbot Katz
> Sent: Monday, July 30, 2007 10:55 AM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]; [email protected]
> Subject: Re: [R] Matrix Multiplication, Floating-Point, etc.
>
> Thank you for responding!
>
> I realize that floating point operations are often inexact, and indeed, the
> difference between the two answers is within the all.equal tolerance, as
> mentioned in FAQ 7.31 (cited by Charles):
>
> >(as.numeric(ev1%*%ev2))==(sum(ev1*ev2))
> [1] FALSE
> >all.equal((as.numeric(ev1%*%ev2)),(sum(ev1*ev2)))
> [1] TRUE
> >
>
> I suppose that's good enough for numerical computation. But I was still
> surprised to see that matrix multiplication (ev1%*%ev2) doesn't give the
> exact right answer, whereas sum(ev1*ev2) does give the exact answer. I
> would've expected them to perform the same two multiplications and one
> addition. But I guess that's not the case.
>
> However, I did find that if I multiplied the two vectors by 10, making the
> entries integers (although the class was still "numeric" rather than
> "integer"), both computations gave equal answers of 0:
>
> >xf1<-10*ev1
> >xf2<-10*ev2
> >(as.numeric(xf1%*%xf2))==(sum(xf1*xf2))
> [1] TRUE
> >
>
> Perhaps the moral of the story is that one should exercise caution and keep
> track of significant digits.
>
> -- TMK --
> 212-460-5430 home
> 917-656-5351 cell
>
There may other issues involved here besides R version, floating point
precision, and OS version. On my WinXP system running R-2.5.1 binary from
CRAN, I get what you expected:
> ev2<-c(0.8,-0.6)
> ev1<-c(0.6,0.8)
> ev1%*%ev2
[,1]
[1,] 0
>
There could be differences in OS release, service packs installed, cpu, etc.
But the moral you draw is probably a reasonable one.
Dan
Daniel Nordlund
Bothell, WA
______________________________________________
[email protected] 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.