特征浮点精度

Eigen floating-point precision

本文关键字:精度 特征      更新时间:2023-10-16

我在使用Eigen时遇到浮点精度问题。

我有两个Eigen::MatrixXd;第一矩阵A(nx1)只包含正整数,而第二矩阵B(nx1

我需要计算以下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矩阵得到CCD_ 6。而ABW的元素之和在C++R中都是相同的。

可能是R使用的是具有扩展精度(80位)的x87 FPU,而Eigen使用的是SSE单元(64位/双精度)。您可以使用Matrix<long double,Dynamic,Dynamic>矩阵类型或确保编译器将针对x87 FPU单元进行检查。