加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 特征浮点精度

发布时间:2020-12-16 06:50:38 所属栏目:百科 来源:网络整理
导读:我使用Eigen在浮点精度方面遇到了麻烦. 我有两个Eigen :: MatrixXd;第一个矩阵A(nx1)仅包含正整数,而第二个矩阵B(nx1)包含填充相同实数的单个列(例如:-0.714312). 我需要计算以下Eigen :: MatrixXd: const auto exponential = [](double x){ return std::e
我使用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.而A,B和W的元素之和在C和R中都是相同的.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读