特征浮点精度

Eigen floating-point precision

提问人:Nick 提问时间:11/20/2015 更新时间:11/20/2015 访问量:3462

问:

我在使用浮点精度方面遇到了问题。Eigen

我有两个;第一个矩阵 (NX1) 仅包含正整数,而第二个矩阵 (NX1) 包含填充相同实数的单个列(例如:-0.714312)。Eigen::MatrixXdAB

我需要计算以下内容: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 矩阵,我得到了 .而 和 的元素之和在 和 in 中是相同的。-2.950208e-09ABWC++R

C++ R 矩阵 精度 特征

评论


答:

0赞 ggael 11/20/2015 #1

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

评论

1赞 Nick 11/21/2015
不幸的是,使用长双精度会产生相同的结果。如何检查我的编译器是否以 x87 FPU 单元为目标?
1赞 ggael 11/21/2015
然后,请更具体地说明 A 和 B 的实际值,以便我们可以重现。