从Python浮点数转换为C++双精度时精度损失
我在我的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代码返回的值是一个可以有更高精度的浮点数。怎么才能获取完整的精度呢?
2 个回答
-1
打印出(PyList_GetItem(_ret, i))的类型。
我猜它会显示为浮点数。
编辑:是在Python代码中,而不是在C++代码中。
2
假设你的Python对象里面存的是双精度的浮点值,那么你的代码就能像你预期的那样正常工作。
很可能你只是误判了一个其实并不存在的问题。我猜测你是在调试工具里查看这些值,而调试工具只显示有限的精度。或者你在打印这些值的时候,也只显示了有限的精度。