2014-04-07 57 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”几乎肯定是双精度的。 –