[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