This question already has answers here:
Why are these numbers not equal?

(6 个回答)


7年前关闭。




在检查一些矩阵乘法运算时,我遇到了一个奇怪的行为。当我“手动”执行乘法(使用乘积和总和)和使用矩阵乘法运算符 %*% 时,我得到不同的结果。
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 (e.g., a
c <- 1:10
a <- 101^(0:9)
p1 <- sum(a*c)
p2 <- a%*%c
p1==p2
      [,1]
[1,] TRUE
p1-p2
      [,1]
[1,] 0

知道为什么会这样吗?

谢谢,
佩德罗

最佳答案

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

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

关于r - R中的矩阵乘法,奇怪的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13762392/

10-12 21:56