2016-10-10 3 views
0

Я вызываю функцию pow() функции математической библиотеки C. Моя установка Python3.5 в Windows 10, но я попробовал ту же программу в Python2.7 с тем же результатом. Возврат от функции не так, как ожидалось. Не уверен, что происходит. Код приведен ниже. Результат: 1,0.Неверный результат математики с вызовом расширения C в Python

from ctypes import * 

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

ответ

1

Дважды проверить типы, я уверен, что прототип мощн является

двойной пау (двойной а, двойной б);

Так изменяет эту линию

libc.pow.argtypes = [c_double, c_int]

К

libc.pow.argtypes = [c_double, c_double ]

Всякий раз, когда вы вызываете c-функции из python, всегда убедитесь, что типы, которые вы вводите из python, верны, не полагайтесь на листинг, как в c/C++.

+0

Это правильно. Похоже на ошибку интерфейса. Он должен поймать это как неправильный тип аргумента, а не возвращать неправильный результат. –

1

Существует несоответствие типа. Используйте c_double для питания. Нравится это. Он должен работать.

libc.pow.argtypes = [c_double, c_double]

+1

IIRC, ваше «также» добавление является излишним. – Hurkyl

+0

@Hurkyl Спасибо. Ред. –

0

пау в C libray принимает дважды, дважды в качестве входных аргументов. Вот почему.

from ctypes import * 

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