提问人:Nick 提问时间:11/20/2015 更新时间:11/20/2015 访问量:3462
特征浮点精度
Eigen floating-point precision
问:
我在使用浮点精度方面遇到了问题。Eigen
我有两个;第一个矩阵 (NX1) 仅包含正整数,而第二个矩阵 (NX1) 包含填充相同实数的单个列(例如:-0.714312)。Eigen::MatrixXd
A
B
我需要计算以下内容: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-09
A
B
W
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 的实际值,以便我们可以重现。
评论