1

用具有元素的向量和矩阵替换所有Eigen::MatrixXds 和s的最简单方法是什么?Eigen::VectorXdlong double

我的代码中的每个基本浮点变量都是long double. 此外,每次我使用矩阵或向量时,我都会使用以下 typedef。

typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;

将这些 typedef 切换为最好的方法是什么?如果我让它们保持原样会发生什么?

4

1 回答 1

5

只需根据 Eigen 自己的全局矩阵 typedefs 定义您自己的 typedefs

如果你使用Eigen::MatrixXd并用 type 的元素填充它long double,这些值将被缩小以适应double矩阵的元素,这会导致精度损失,或者在最坏的情况下会导致溢出错误。然而,在许多架构上,双精度浮点运算是以 80 位扩展精度完成的,因此结果可能相同。你当然不应该依赖这个!有关更多信息,请参见例如long double 与 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;
}
于 2017-07-02T22:42:51.633 回答