特征浮点精度
Eigen floating-point precision
我在使用Eigen
时遇到浮点精度问题。
我有两个Eigen::MatrixXd
;第一矩阵A
(nx1)只包含正整数,而第二矩阵B
(nx1
我需要计算以下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矩阵得到CCD_ 6。而A
、B
和W
的元素之和在C++
和R
中都是相同的。
可能是R使用的是具有扩展精度(80位)的x87 FPU,而Eigen使用的是SSE单元(64位/双精度)。您可以使用Matrix<long double,Dynamic,Dynamic>
矩阵类型或确保编译器将针对x87 FPU单元进行检查。
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 特征:模板函数中矩阵的平面图
- basic_string的前导/尾部不区分空格的特征
- 如何使用特征库实现 max(A),其中 A 是双精度复矩阵
- 错误:类型"类特征::张量<双精度,3>"参数提供给"删除",预期指针
- 特征浮点精度
- OpenCV将PCA特征向量写入yaml文件,丢失精度
- 增加SIFT中检测到的特征的数量将提高精度