2014-04-07 84 views
0

我在我的C++程序中嵌入了python代碼。 使用PyFloat_AsDouble導致精度損失。它只能保持6位精度數字。我的程序對精度非常敏感。有沒有已知的解決方法? 下面是相關C++代碼:從python float轉換爲C++ double時的精度損失

_ret = PyObject_CallObject(pFunc, pArgs); 
vector<double> retVals; 
for(size_t i=0; i<PyList_Size(_ret); i++){ 
    retVals[i] = PyFloat_AsDouble(PyList_GetItem(_ret, i)); 
} 

retVals [I]具有僅6精度,同時由Python代碼返回的值是可以具有更高的精度浮點數。 如何獲得完整的精度?

+1

'retVals'是如何聲明的?如果你將它聲明爲一個「float」數組,你就會得到你所要求的。 –

+0

retVals被宣佈爲雙打的向量 – Akhil

回答

2

假設Python對象包含以雙精度存儲的浮點值,那麼您的代碼將按照您的預期工作。

很可能你只是錯誤診斷一個不存在的問題。我的猜測是您正在查看調試器中的值,該值僅以有限的精度顯示值。或者你打印出的精度有限。

+0

的確,事實證明我的打印精度不夠高。我也被這個帖子誤導了,這個帖子支持我的觀點:https://github.com/coolfluid/coolfluid3/issues/253 – Akhil

-1

打印類型(PyList_GetItem(_ret,I))

我敢打賭,它會顯示浮動。

編輯:在python代碼中,不在C++代碼中。

+0

很可能。當然,Python「float」幾乎肯定是雙精度的。 –