Как правильно конвертировать типы в Cython?Python

Программы на Python
Ответить
Anonymous
 Как правильно конвертировать типы в Cython?

Сообщение Anonymous »

У меня есть функция, которая выглядит так:

Код: Выделить всё

cdef double __test_func(double x, double y, double z):
return (x-y)/((2*x-y)*y)**(0.5*z)
def test_func(x, y, z):
return __test_func(x, y, z)
Я хочу использовать эту test_func в Python, не обращая внимания на то, набрал ли я точку или нет, как в настоящей функции Python. Часть — это то, что я написал после прочтения руководства по Cython, но, честно говоря, я не уверен, правильно ли я поступил, особенно когда они назвали это «приведением типов». Потому что, если я правильно помню, приведение типов — это не совсем то же самое, что преобразование типов.
И, как я и подозревал, это не очень хорошая идея. Эта функция работает как-то так, как я написал. Но если бы я ввел аргументы оболочки Python,

Код: Выделить всё

ctypedef fused Numeric:
char
short
int
long
long long
float
double
long double
cdef double __test_func(double x, double y, double z):
return (x-y)/((2*x-y)*y)**(0.5*z)
def test_func(Numeric x, Numeric y, Numeric z):
return __test_func(x, y, z)
и после компиляции и загрузки его в оболочку Python, если я передаю аргумент x как целое число, например, x=100, то он получит ужасно неправильно и дает совершенно другой результат, чем когда я даю x=100., как если бы я выполнял приведение типов в C.
Итак, как мне обеспечить преобразование типов сделано правильно в файлах cython? В частности, как мне преобразовать его в плавающую запятую двойной точности (64-битная с плавающей запятой)? Я знаю, что в Python это синоним float, но, учитывая, что это cython, я не совсем уверен, какой будет точность float(x).

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-cython
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»