Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中调用C扩展时出现错误的数学结果_Python_Python C Extension - Fatal编程技术网

在Python中调用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

我正在调用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谢谢。编辑,没错。看起来像是一个接口错误。它应该将其捕获为错误的参数类型,而不是返回错误的结果。这是正确的。看起来像是一个接口错误。它应该将其捕获为错误的参数类型,而不是返回错误的结果。