在 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++ 中那样依赖强制转换
我正在调用 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++ 中那样依赖强制转换