0

我在我的 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 代码返回的值是一个浮点数,可以有更高的精度。如何获得全精度?

4

2 回答 2

2

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

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

于 2014-04-07T22:14:56.400 回答
-1

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

我敢打赌它会显示浮动。

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

于 2014-04-07T22:16:03.833 回答