2014-04-07 4 views
0

내 C++ 프로그램에 파이썬 코드가 임베드됩니다. PyFloat_AsDouble을 사용하면 정밀도가 떨어집니다. 최대 6 자릿수까지만 유지합니다. 내 프로그램은 정밀도에 매우 민감합니다. 이것에 대한 알려진 수정이 있습니까? 파이썬 코드에 의해 리턴 된 값보다 높은 정밀도를 가질 수 플로트 인 반면,Python float에서 C++ double로 변환하는 동안 정밀도 손실

_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)의 정밀도를 가지고 여기 관련 C++ 코드이다. 전체 정밀도를 얻는 방법?

+1

어떻게'retVals'가 선언 되었습니까? 'float'의 배열로 선언했다면, 여러분이 요구 한 것을 얻게 될 것입니다. –

+0

retVals는 double의 벡터로 선언됩니다 – Akhil

답변

2

파이썬 개체에 부동 소수점 값이 배정도로 저장되어 있다고 가정하면 예상대로 코드가 작동합니다.

아마도 존재하지 않는 문제를 잘못 진단했을 가능성이 큽니다. 내 생각 엔 제한된 정밀도로만 값을 표시하는 디버거 값을보고있는 것입니다. 아니면 제한된 정밀도로 인쇄하고 있습니다.

+0

실제로 나는 충분한 정밀도로 인쇄하지 못했습니다. 나는 또한 내 지점을 지원이 게시물에 의해 그릇 인도했다 : https://github.com/coolfluid/coolfluid3/issues/253 – Akhil

-1

인쇄 유형 (PyList_GetItem (_ret, 난))

내 건은 부동 소수점 표시됩니다이다.

편집 : 파이썬 코드에서, C++ 코드가 아닙니다.

+0

가능성이 높습니다. 물론, 파이썬'float'은 거의 확실하게 double precision입니다. –

관련 문제