[R] Matrix Multiplication, Floating-Point, etc.

Doran, Harold HDoran at air.org
Mon Jul 30 19:58:59 CEST 2007


Talbot

The general advice on this list is to read the following

http://docs.sun.com/source/806-3568/ncg_goldberg.html

 

> -----Original Message-----
> From: Talbot Katz [mailto:topkatz at msn.com] 
> Sent: Monday, July 30, 2007 1:55 PM
> To: cberry at tajo.ucsd.edu
> Cc: r-help at stat.math.ethz.ch; Doran, Harold
> 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
> 
> 
> 
> >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