我在我的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。 如何获得完全精确度?
答案 0 :(得分:2)
假设Python对象包含存储为双精度的浮点值,那么您的代码将按预期工作。
很可能你只是错误地诊断了一个不存在的问题。我的猜测是你正在查看调试器中的值,它只显示有限精度的值。或者你打印它们的精度有限。
答案 1 :(得分:-1)
打印类型(PyList_GetItem(_ret,i))
我打赌它会显示浮动。
编辑:在python代码中,而不是在C ++代码中。