Где я могу проверить математические функции Python? - PullRequest
21 голосов
/ 29 марта 2011

Я хотел бы посмотреть, как Python вычисляет квадратные корни, поэтому я попытался найти определение для math.sqrt(), но нигде не могу его найти. Я смотрел в _math.c, mathmodule.c и в других местах.

Я знаю, что python использует математические функции C, но они где-то в дистрибутиве Python или они связаны с кодом где-то еще? Я использую Mac OS X.

Где находится алгоритм в math.sqrt()?

Ответы [ 4 ]

13 голосов
/ 29 марта 2011

Это зависит от реализации.CPython использует математические функции из стандартной библиотеки C.Jython, скорее всего, использует математические методы Java.И так далее.

Фактически, Python не имеет ничего общего с реальной реализацией математических функций.Они в большей степени связаны с IEEE 754, который в наши дни используется почти исключительно для представления чисел с плавающей запятой в компьютерах.

В любом случае, если говорить в терминах CPython, его модуль math является просто тонкой оболочкой для функций C ( prooflink , внизу страницы).Функции Си реализованы как часть стандартной библиотеки Си.Обычно он включается в дистрибутивы ОС и, скорее всего, распространяется в двоичной форме, без источников.Также обратите внимание, что многие микропроцессоры имеют специализированные инструкции для некоторых из этих операций, и ваш компилятор вполне может использовать их, а не переходить к реализации в библиотеке C.

Я не могу сказать вам точный алгоритм, которыйиспользуется в стандартной C-библиотеке вашей системы.Некоторые из возможных алгоритмов объясняются здесь .

В конкретном случае OS X математические функции живут в libSystem.dylib, который, к сожалению, не является открытым исходным кодом (есть только код заглушки доступен на сайте Apple с открытым исходным кодом ).Однако вы можете разобрать его, если вам интересно, - на текущих системах попробуйте, например,

otool -tvV /usr/lib/system/libsystem_m.dylib
2 голосов
/ 29 марта 2011

Некоторые модули написаны на C, а не на python, поэтому вы не сможете найти файлы .py. Для списка этих вы можете использовать:

import sys print sys.builtin_module_names

Поскольку он написан на C, вам придется найти его в исходном коде. Если у вас уже есть источник, он находится в каталоге модулей.

0 голосов
/ 04 декабря 2013

Я не уверен, где найти точный алгоритм, используемый Python, но я надеюсь, что это поможет вам. Самый простой способ вычислить квадратный корень в Python - использовать оператор ** (power). Я не знаю, сколько работы вы проделали с индексами, но квадратный корень - это то же самое, что положить что-то в половину. Таким образом, при этом вы можете использовать:

print x**0.5

Это печатает квадратный корень любого числа, которое вы поставили вместо x. Конечно, если вы используете Python 3, вам нужно написать это как:

print(x**0.5)

Это был бы самый простой способ создать алгоритм для вычисления квадратного корня числа. Это может быть реализовано в такой функции, как:

sqrt(x):
    return x**0.5

Для других корней, таких как кубический корень и т. Д., Вы можете использовать функцию, подобную этой:

root(x, root):
    return x**root

А когда вы передаете корневое число в функцию, используйте номера индексов в десятичной форме, например:

2: 0,5

3: 0,33333333 (повторяющиеся)

4: 0,25

5: 0,2

Я надеюсь, что вы видите шаблон. Я также надеюсь, что это помогло вам! :)

0 голосов
/ 29 марта 2011
...