使用Eigen
时,我遇到了浮点精度问题。
我有两个Eigen::MatrixXd
;第一个矩阵A
(nx1)只包含正整数,而第二个矩阵B
(nx1)包含一个填充相同实数的列(例如:-0.714312)。
我需要计算以下Eigen::MatrixXd
:
const auto exponential = [](double x)
{ return std::exp(x); };
MatrixXd W = B.unaryExpr(exponential);
MatrixXd residuals = A - W;
问题在于,当我打印剩余部分的总和时:
cout << residuals.sum();
// output = 6.16951e-06
通过使用R和相同的输入矩阵执行相同的操作,我获得了不同的值。
通过使用R矩阵,我得到-2.950208e-09
。虽然A
,B
和W
的元素总和在C++
和R
中都相同。
答案 0 :(得分:0)
可能是R使用具有扩展精度(80位)的x87 FPU,而Eigen使用SSE单位(64位/双)。您可以使用Matrix<long double,Dynamic,Dynamic>
矩阵类型或确保编译器将以x87 FPU为单位来检查。