本征浮点精度

Nic*_*ick 5 c++ precision r matrix eigen

我在使用浮点精度时遇到麻烦 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;
Run Code Online (Sandbox Code Playgroud)

问题是当我打印残差之和时:

cout << residuals.sum();
// output = 6.16951e-06
Run Code Online (Sandbox Code Playgroud)

通过使用R和相同的输入矩阵执行相同的操作,我得到了一个不同的值。

通过使用R矩阵,我得到-2.950208e-09。同时的元素的总和AB并且W是相同的两个中C++和在R

gga*_*ael 0

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