R中的矩阵乘法,结果奇怪

时间:2012-12-07 11:41:53

标签: r matrix-multiplication

在检查一些矩阵乘法运算时,我遇到了一个奇怪的行为。当我“手动”执行乘法(使用乘积和和)并使用矩阵乘法运算符%*%时,我得到不同的结果。

c <- 1:10
a <- 100^(0:9)
p1 <- sum(a*c)
p2 <- a%*%c
p1==p2
      [,1]
[1,] FALSE
p1-p2
      [,1]
[1,] -2048

但是,当我使用任何其他值(例如,a&lt; - 101 ^ 0:9)时,我会得到相同的结果:

c <- 1:10
a <- 101^(0:9)
p1 <- sum(a*c)
p2 <- a%*%c
p1==p2
      [,1]
[1,] TRUE
p1-p2
      [,1]
[1,] 0

知道为什么会这样吗?

谢谢你, 佩德罗

1 个答案:

答案 0 :(得分:2)

%*%会以稍微不同的方式计算其结果,这意味着在不同的地方会出现不同的舍入错误,从而导致不同的整体结果。

我只是猜测,但我相信这个可能归因于sum将其累加器保留在机器浮点寄存器中,该寄存器在英特尔架构上有80 bit extended precision 。如果您想确切知道,则必须查看R的汇编代码。