Eigen::MatrixXd 类型定义的替换
Substitutions for Eigen::MatrixXd typedefs
用具有 long double
个元素的向量和矩阵替换所有 Eigen::MatrixXd
和 Eigen::VectorXd
的最简单方法是什么?
我代码中的每个基本浮点变量都是 long double
类型。此外,每次我使用矩阵或向量时,我都会使用以下类型定义。
typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
将这些 typedef 转换成什么最好?如果我让它们保持原样会怎样?
根据Eigen自己的定义自己的typedef即可global matrix typedefs.
如果您使用 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;
}
用具有 long double
个元素的向量和矩阵替换所有 Eigen::MatrixXd
和 Eigen::VectorXd
的最简单方法是什么?
我代码中的每个基本浮点变量都是 long double
类型。此外,每次我使用矩阵或向量时,我都会使用以下类型定义。
typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
将这些 typedef 转换成什么最好?如果我让它们保持原样会怎样?
根据Eigen自己的定义自己的typedef即可global matrix typedefs.
如果您使用 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;
}