[R] Matrix Multiplication, Floating-Point, etc.
Talbot Katz
topkatz at msn.com
Mon Jul 30 19:54:54 CEST 2007
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
>From: "Charles C. Berry" <cberry at tajo.ucsd.edu>
>To: Talbot Katz <topkatz at msn.com>
>CC: r-help at stat.math.ethz.ch
>Subject: Re: [R] Matrix Multiplication, Floating-Point, etc.
>Date: Mon, 30 Jul 2007 09:27:42 -0700
>
>
>
>7.31 Why doesn't R think these numbers are equal?
>
>On Fri, 27 Jul 2007, Talbot Katz wrote:
>
>>Hi.
>>
>>I recently tried the following in R 2.5.1 on Windows XP:
>>
>>>ev2<-c(0.8,-0.6)
>>>ev1<-c(0.6,0.8)
>>>ev1%*%ev2
>> [,1]
>>[1,] -2.664427e-17
>>>sum(ev1*ev2)
>>[1] 0
>>>
>>
>>(I got the same result with R 2.4.1 on a different Windows XP machine.)
>>
>>I expect this issue is very familiar and probably has been discussed in
>>this
>>forum before. Can someone please point me to some documentation or
>>discussion about this? Is there some standard way to get the "correct"
>>answer from %*%?
>>
>>Thanks!
>>
>>-- TMK --
>>212-460-5430 home
>>917-656-5351 cell
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch 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.
>>
>
>Charles C. Berry (858) 534-2098
> Dept of Family/Preventive
>Medicine
>E mailto:cberry at tajo.ucsd.edu UC San Diego
>http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
>
>
More information about the R-help
mailing list