在Python中调用C扩展时出现错误的数学结果
我正在调用C的数学库的在Python中调用C扩展时出现错误的数学结果,python,python-c-extension,Python,Python C Extension,我正在调用C的数学库的pow()函数。我在Windows 10上安装的是Python3.5,但我在Python2.7中尝试了相同的程序,结果相同。函数返回的结果与预期不符。不知道发生了什么事。代码如下所示。我得到的结果是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
pow()
函数。我在Windows 10上安装的是Python3.5,但我在Python2.7中尝试了相同的程序,结果相同。函数返回的结果与预期不符。不知道发生了什么事。代码如下所示。我得到的结果是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_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)
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的原型是 双功率(双a,双b) 所以改变了这条线 libc.pow.argtypes=[c_double,c_int] 到 libc.pow.argtypes=[c_-double,c_-double]
无论何时从python调用c函数,都要确保从python输入的类型是正确的,不要像在c/c++中那样依赖强制转换,仔细检查您的类型,我非常确定pow的原型是正确的 双功率(双a,双b) 所以改变了这条线 libc.pow.argtypes=[c_double,c_int] 到 libc.pow.argtypes=[c_-double,c_-double]
无论何时从python调用c函数,都要确保从python输入的类型是正确的,不要像在c/c++IIRC中那样依赖强制转换,您的“还”补遗是多余的。@Hurkyl谢谢。编辑。IIRC,你的“还”补遗是多余的。@Hurkyl谢谢。编辑,没错。看起来像是一个接口错误。它应该将其捕获为错误的参数类型,而不是返回错误的结果。这是正确的。看起来像是一个接口错误。它应该将其捕获为错误的参数类型,而不是返回错误的结果。