在 Python 中调用 C 扩展的错误数学结果

Wrong math result with calling C extension in Python

我正在调用 C 数学库的 pow() 函数。我的安装是 Python3.5 on Windows 10,但我在 Python2.7 中尝试了相同的程序,结果相同。函数中的 return 与预期不符。不确定发生了什么。代码如下。我得到的结果是 1.0.

from ctypes import *

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

类型不匹配。也使用 c_double 作为电源。 像这样。它应该有效。

libc.pow.argtypes = [c_double, c_double]

C 库中的 pow 接受 double, double 作为输入参数。这就是为什么。

from ctypes import *

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

仔细检查你的类型,我很确定 pow 的原型是

double pow(double a, double b);

所以改变这一行

libc.pow.argtypes = [c_double, c_int]

libc.pow.argtypes = [c_double, c_double]

每当您从 python 调用 c 函数时,始终确保您从 python 输入的类型是正确的,不要像在 c/c++ 中那样依赖强制转换