我正在将一个包从R翻译到IML,这将在网上免费完成:)。我从分解一个大矩阵得到不同的结果,这两个结果看起来都是一样的,但是,例如,如果我取U的前2列并做U'*U,我的2x2矩阵将是完全不同的(U_11 = 1.1e-17和U_11 =1.4e-17)。差别很小(3e-18),这让我认为这可能与每个软件使用的小数有关,SAS IML和R。有人知道这个话题吗?我怎么测试这个?谢谢。
发布于 2015-06-30 10:25:58
在统计学中,我们将非常小的差异描述为“统计上微不足道”。对于数值分析人员来说,小于“机器epsilon”(R中的.Machine$double.eps或SAS中的常量(“macep”))的差异几乎总是“数字上没有意义的”。
SAS和R都使用双精度计算,并且可能正在调用类似的数字库。对于这么小的差异,我猜想原因不是算法,而是每个软件使用不同的编译器标志和优化标志。
即使在单个产品中,计算出两个不同订单的结果也会导致这样的小差异。例如,运行以下数据步骤:
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;我的建议是在比较不同的软件时忽略“数字不重要”的结果。有关浮点计算的详细信息,请参阅浮点指南。有关真正的细节,请参见“每一个计算机科学家都应该知道浮点算法的知识”。
https://stackoverflow.com/questions/31125666
复制相似问题