用具有元素的向量和矩阵替换所有Eigen::MatrixXd
s 和s的最简单方法是什么?Eigen::VectorXd
long double
我的代码中的每个基本浮点变量都是long double
. 此外,每次我使用矩阵或向量时,我都会使用以下 typedef。
typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
将这些 typedef 切换为最好的方法是什么?如果我让它们保持原样会发生什么?
用具有元素的向量和矩阵替换所有Eigen::MatrixXd
s 和s的最简单方法是什么?Eigen::VectorXd
long double
我的代码中的每个基本浮点变量都是long double
. 此外,每次我使用矩阵或向量时,我都会使用以下 typedef。
typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
将这些 typedef 切换为最好的方法是什么?如果我让它们保持原样会发生什么?
只需根据 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;
}