Я просто играю вокруг SWIG, чтобы создать модуль python для конкретной библиотеки C. У меня возникли проблемы с двойными и плавающими переменными. Вот пример:Модуль python, скомпилированный SWIG, возвращает неверный результат
/***** simple.c *****/
#include <stdio.h>
double doublefun(double b){
printf("c(%g)",b);
return b+12.5;
}
float floatfun(float b){
printf("c(%f)",b);
return b+12.5;
}
int intfun(int b){
printf("c(%d)",b);
return b+12;
}
/***** simple.i *****/
%module simple
%{
%}
extern double doublefun(double);
extern float floatfun(float);
extern int intfun(int);
И
#***** simpletest.py *****#
import simple
print "i:",simple.intfun(2)
print "f:",simple.floatfun(2.3)
print "d:",simple.doublefun(2.3)
Результат:
i:c(2) 14
f:c(36893488147419103232.000000) 30.0
d:c(2.3) 6.0
Любые идеи, почему это происходит?
P.S. Если я вызываю функцию из кода C ....
int main(int argc, char** argv){
printf("i::%d\n",intfun(2));
printf("f::%f\n",floatfun(2.3));
printf("d::%g\n",doublefun(2.3));
return 0;
}
Все отлично:
c(2)i::14
c(2.300000)f::14.800000
c(2.3)d::14.8
добавить, что происходит с 'floatfun', когда вы запускаете только код C? не запускаемый python, вызывающий его из простой функции c c. –
@StephaneRolland Спасибо за хороший вопрос. Я редактировал сообщение. – rth