[R] Matrix Multiplication, Floating-Point, etc.
m_olshansky at yahoo.com
Tue Jul 31 04:06:22 CEST 2007
After multiplication by 10 you get 6*8 = 48 - the
result is an exact machine number so there is no
roundoff, while 0.6*0.8 = 0.48, where neither of the 3
numbers (0.6, 0.8, 0.48) is an exact machine mumber.
However, (-0.6)*0.8 should be equal EXACTLY to
-(0.6*0.8), and in fact you get that sum(ev1*ev2) is
What is strange is that you are not getting this
result from ev1 %*% ev2. This means that either %^%
uses some non-straightforward algorithm or it somehow
sets the rounding control to something different from
"round to nearest". In the later case (-0.6) does not
necessarily equal to -(0.6) and the rounding after
multiplication is not necessarily symetric.
--- Talbot Katz <topkatz at msn.com> wrote:
> 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):
>  FALSE
>  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
>  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:
> >>I recently tried the following in R 2.5.1 on
> Windows XP:
> >> [,1]
> >>[1,] -2.664427e-17
> >> 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
> >>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 %*%?
> >>-- TMK --
> >>212-460-5430 home
> >>917-656-5351 cell
> >>R-help at stat.math.ethz.ch mailing list
> >>PLEASE do read the posting guide
> >>and provide commented, minimal, self-contained,
> reproducible code.
> >Charles C. Berry (858)
> > Dept
> of Family/Preventive
> >E mailto:cberry at tajo.ucsd.edu UC San
> >http://famprevmed.ucsd.edu/faculty/cberry/ La
> Jolla, San Diego 92093-0901
> R-help at stat.math.ethz.ch mailing list
> PLEASE do read the posting guide
> and provide commented, minimal, self-contained,
> reproducible code.
More information about the R-help