2016-10-10 2 views
0

나는 C의 수학 라이브러리의 pow() 함수를 호출하려고합니다. 내 설치는 Windows 10의 Python3.5이지만 Python2.7에서 같은 결과를 얻으려고했습니다. 함수로부터의 리턴은 예상대로 아닙니다. 무슨 일이 일어나고 있는지 잘 모르겠다. 코드는 아래와 같습니다. 내가 얻는 결과는 1.0입니다.파이썬에서 C 확장을 호출하면 계산 결과가 잘못됨

from ctypes import * 

libc = cdll.msvcrt 
libc.pow.argtypes = [c_double, c_int] 
libc.pow.restype = c_double 
libc.pow(2.3, 2) 

답변

1

더블 나는 펑의 프로토 타입

이중 탕 (더블 A, 더블 b)는 확실 해요, 당신의 유형을 확인;

그래서이 광고

의 libc.pow.argtypes = c_double, c_int]

의 libc.pow.argtypes = c_double, c_double 변경 ]

파이썬에서 c 함수를 호출 할 때마다 항상 파이썬에서 입력하는 유형이 올바른지 확인하십시오. c/C++

+0

맞습니다. 인터페이스 버그 인 것 같습니다. 잘못된 결과를 리턴하는 대신 잘못된 인수 유형으로이를 포착해야합니다. –

1

유형이 일치하지 않습니다. 전원으로 c_double을 사용하십시오. 이렇게하면됩니다. 그것은 작동해야합니다. C에서의 libray

의 libc.pow.argtypes = c_double, c_double]

+1

IIRC와 같이 캐스팅에 의존하지 말고 "추가"부록이 불필요합니다. – Hurkyl

+0

@Hurkyl Thanks. 편집 됨. –

0

POW는 이중 입력 인수로서 이중 걸린다. 그래서 이유가 있습니다.

from ctypes import * 

libc = cdll.msvcrt 
libc.pow.argtypes = [c_double, c_double] 
libc.pow.restype = c_double 
libc.pow(2.3, 2.0) 
관련 문제