2017-07-02 53 views
0

用矢量和具有long double元素的矩陣替換所有Eigen::MatrixXd s和Eigen::VectorXd s的最簡單方法是什麼?Eigen :: MatrixXd typedefs的替代品

我的代碼中的每個基本浮點變量的類型都是long double。此外,每次使用矩陣或向量時,我都使用以下typedef。

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

將這些typedef切換到最好的東西是什麼?如果我將它們保持原樣,會發生什麼?

+0

但是更重要的問題是,你真的需要'長雙'嗎?它可能會顯着減慢所有的計算速度,因爲大多數處理器都是爲快速執行「double」運算而構建的。也可能是你的編譯器忽略了'long double',而是使用'double'。閱讀[維基百科文章](https://en.wikipedia.org/wiki/Long_double)並再次思考。 –

回答

2

只需根據Eigen自己的global matrix typedefs定義您自己的typedef。

如果使用Eigen::MatrixXdlong 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; 
} 
+0

謝謝。我看到了這個鏈接,並想知道「long double」作爲第一個模板參數和「std :: complex 」之間的區別。我會看看其他的東西,謝謝 – Taylor