2012-01-21 4 views
0

SWIG를 사용하여 C++ 코드를 파이썬으로 포장했습니다. 그러나 부동 소수점 숫자의 변환은 이상합니다. I 파이썬C++ float가 Python으로 변환 됨 float 잘못된 변환

>>> import mymodule 
>>> mymodule.foo() 
62.02000045776367 
>>> 

아래 함수 (C++로 작성된)

float foo() { 
    float x=62.02; 
    return x; 
} 

있고 (SWIG로 포장 한 후)을 실행하면 는 예를 들어, 62.02000045776367 대신 62.02 반환한다.

올바른 전환을하는 방법을 SWIG에 알릴 방법이 있습니까?

답변

4

->double 전환, 아니가 전환이 계속됩니다.

62.02은 정확히 C float으로 표시 할 수 없습니다. float x=62.02을 수행하는 순간 변수에 언급 된 값이 포함됩니다.

나는 What Every Computer Scientist Should Know About Floating-Point Arithmetic을 강력히 추천합니다.

+0

그건 바보 같은 질문 이었어. 나는 잘못된 타입을 사용하고 있다는 것을 알지 못했다. 'double'을 사용하여 모든 것을 해결했습니다. 모두에게 감사합니다! –

+3

@CaioS., 여전히 링크를 읽으십시오. 이것은 단지'float' 대'double' 문제가 아니라 많은 프로그래밍 언어의 매우 기본적인 측면입니다. –

5

이것은 당신이 소수의 분수 2/3을 표현 할 수없는 많은처럼 float로 정확하게 소수점 62.02를 나타낼 수 없습니다 단지의 올바른 변환입니다.

당신은 당신이 모두 floatdouble62.02을 저장하면 C++가 보는 것을 볼이 짧은 코드보다 조금 볼 수 있습니다 http://ideone.com/HvfZb이 손실 float 이외의

+0

그러나 파이썬에서 정확한 값을 얻는 방법이 있습니까? –

+1

또한 파이썬의 float 타입은 C++의 더블 타입에 해당합니다. float에서 double 로의 변환으로 인해 정밀도의 차이가 나타납니다. – casevh

+2

@Caio : * C가 가지고있는 정확한 값입니다. 처음에는 "62.02"를 갖지 않습니다. –

관련 문제