2015-11-19 75 views
4

我在使用Eigen時遇到了浮點精度問題。本徵浮點精度

我有兩個Eigen::MatrixXd;第一個矩陣A(nx1)僅包含正整數數字,而第二個矩陣B(nx1)包含填充相同實數的單個列(例如:-0.714312)。

我需要計算以下Eigen::MatrixXd

const auto exponential = [](double x) 
{ return std::exp(x); }; 


MatrixXd W = B.unaryExpr(exponential); 
MatrixXd residuals = A - W; 

的問題是,當我打印殘差的總和:

cout << residuals.sum(); 
// output = 6.16951e-06 

我得到不同的值,通過執行相同的操作使用R和相同的輸入矩陣。

通過使用R矩陣我得到-2.950208e-09。儘管A,BW的元素總和在C++R中都是相同的。

回答

0

它可能是R使用擴展精度的x87 FPU(80位),而Eigen使用SSE單位(64位/雙)。您可以通過使用Matrix<long double,Dynamic,Dynamic>矩陣類型或確保您的編譯器將目標x87 FPU單元來檢查。

+1

不幸的是,使用long double會得到相同的結果。如何檢查我的編譯器是否針對x87 FPU單元? – Nick

+0

然後請更具體地說明A和B的實際值,以便我們可以重現。 – ggael