从python float转换为C ++ double时的精度损失

时间:2014-04-07 22:04:47

标签: python c++ floating-point precision python-embedding

我在我的c ++程序中嵌入了python代码。 使用PyFloat_AsDouble会导致精度损失。它最多只能保存6位精确数字。我的程序对精度非常敏感。这有一个已知的解决方案吗? 这是相关的C ++代码:

_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代码返回的值是一个可以具有更高精度的float。 如何获得完全精确度?

2 个答案:

答案 0 :(得分:2)

假设Python对象包含存储为双精度的浮点值,那么您的代码将按预期工作。

很可能你只是错误地诊断了一个不存在的问题。我的猜测是你正在查看调试器中的值,它只显示有限精度的值。或者你打印它们的精度有限。

答案 1 :(得分:-1)

打印类型(PyList_GetItem(_ret,i))

我打赌它会显示浮动。

编辑:在python代码中,而不是在C ++代码中。