Eigen :: MatrixXd typedef的替换

时间:2017-07-02 21:23:37

标签: c++ typedef eigen long-double

用包含Eigen::VectorXd元素的向量和矩阵替换所有long doublelong double的最简单方法是什么?

我的代码中的每个基本浮点变量都是typedef Eigen::VectorXd Vec; typedef Eigen::MatrixXd Mat; 类型。此外,每次我使用矩阵或向量时,我都使用以下typedef。

 For each col in datagridview.columns   
   If col.CellType.Name = "DataGridViewImageColumn" Then
   'do something
   End If
 Next

将这些typedef切换到最好的是什么?如果我把它们原样留下会怎么样?

1 个答案:

答案 0 :(得分:5)

只需根据Eigen自己的global matrix typedefs定义自己的typedef。

如果您使用Eigen::MatrixXd并使用long double类型的元素填充它们,那么这些值将缩小以适应矩阵的double元素,从而导致精度损失或者,在最坏的情况下,溢出错误。但是,在许多架构中,双精度浮点运算以80位扩展精度完成,因此结果可能相同。你肯定不应该依赖这个!有关详情,请参阅long double vs double

#include <Eigen/Core>

typedef Eigen::Matrix< long double, Eigen::Dynamic, 1              > Vec;
typedef Eigen::Matrix< long double, Eigen::Dynamic, Eigen::Dynamic > Mat;

int main()
{
  long double ld = 2;

  Mat m(1,1);
  m(0,0) = ld;
}