我正在将一个包从 R 翻译成 IML,完成后将在网上免费 :)。我从一个大矩阵的分解中得到了不同的结果,当你看它们时,这两个结果看起来是一样的,但是,例如,如果我取 U 的前 2 列并做 U'*U,我的 2x2 矩阵将完全不同( U_11 = 1.1e-17 和 U_11 =1.4e-17)。差异非常小(3e-18),这让我认为这可能与每个软件使用的小数位数有关,SAS IML 和 R。有人对这个主题有更多了解吗?我该如何测试呢?谢谢你。
问问题
144 次
1 回答
1
在统计学中,我们将非常小的差异描述为“在统计上不显着”。对于数值分析师来说,小于“机器 epsilon”(R 中的 .Machine$double.eps 或 SAS 中的常量(“maceps”))的差异几乎总是“在数值上微不足道”。
SAS 和 R 都使用双精度计算,并且可能调用类似的数值库。对于这么小的差异,我推测原因不是算法,而是因为每个软件使用不同的编译器标志和优化标志。
即使在一个产品中,计算两个不同订单的结果也可能导致像这样的微小差异。例如,运行以下 DATA 步骤:
data _null_;
x = (1 + 1 + 1 + 1 + 1 + 1 + 1) / 7;
y = (1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7);
diff = x - y;
put diff=;
run;
我的建议是在比较不同的软件时忽略“数值上无关紧要”的结果。有关浮点计算的更多信息,请参阅浮点指南。有关真正的细节,请参阅“每个计算机科学家都应该了解的浮点运算知识”
于 2015-06-30T10:25:58.013 回答