繁体   English   中英

特征浮点精度

[英]Eigen floating-point precision

我使用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 虽然ABW的元素之和在C++R都是相同的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM