3

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

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 (例如,a <- 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

知道为什么会这样吗?

谢谢你,佩德罗

4

1 回答 1

2

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

我只是猜测,但我相信这可能是由于sum将其累加器保存在机器浮点寄存器中,该寄存器在英特尔架构上具有80 位扩展精度。如果您想确定,则必须查看 R 的汇编代码。

于 2012-12-07T13:05:40.810 回答