从Python浮点数转换为C++双精度时精度损失

0 投票
2 回答
1163 浏览
提问于 2025-04-18 01:46

我在我的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对象里面存的是双精度的浮点值,那么你的代码就能像你预期的那样正常工作。

很可能你只是误判了一个其实并不存在的问题。我猜测你是在调试工具里查看这些值,而调试工具只显示有限的精度。或者你在打印这些值的时候,也只显示了有限的精度。

撰写回答