用包含Eigen::VectorXd
元素的向量和矩阵替换所有long double
和long 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切换到最好的是什么?如果我把它们原样留下会怎么样?
答案 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;
}