Где я могу проверить математические функции Python?
Я хотел бы посмотреть, как Python вычисляет квадратные корни, поэтому я попытался найти определение для math.sqrt()
, но я не могу его найти нигде. Я просмотрел _math.c
, mathmodule.c
и в других местах.
Я знаю, что python использует математические функции C, но являются ли они где-то в дистрибутиве Python или связаны с кодом в другом месте? Я использую Mac OS X.
Где алгоритм в math.sqrt()
?
Ответы
Ответ 1
Это зависит от реализации. CPython использует математические функции из стандартной библиотеки C. Jython, скорее всего, использует математические методы Java. И так далее.
Фактически, Python не имеет ничего общего с фактической реализацией математических функций. Они больше связаны с IEEE 754, который используется почти исключительно для представления чисел с плавающей запятой в компьютерах в настоящее время.
В любом случае, говоря о CPython, его модуль math
- это просто тонкая оболочка над функциями C (prooflink, внизу страницы). Функции C реализованы как часть стандартной библиотеки C. Он обычно включается в дистрибутивы ОС и, скорее всего, распространяется в двоичной форме без источников. Обратите внимание также, что многие микропроцессоры имеют специальные инструкции для некоторых из этих операций, и ваш компилятор может использовать их, а не прыгать к реализации в библиотеке C.
Я не могу сказать вам точный алгоритм, который используется в стандартной библиотеке C в вашей системе. Некоторые из возможных алгоритмов объясняются здесь.
В конкретном случае OS X математические функции живут в libSystem.dylib
, который, к сожалению, не является Open Source (имеется только код-заглушка, доступный на Сайт с открытым исходным кодом Apple). Однако вы можете разобрать его, если вам интересно - в существующих системах, попробуйте, например,
otool -tvV /usr/lib/system/libsystem_m.dylib
Ответ 2
Некоторые модули написаны на C, а не на python, поэтому вы не сможете найти файлы .py. Для их списка вы можете использовать:
import sys
print sys.builtin_module_names
Поскольку он написан на C, вам придется найти его в исходном коде. Если у вас уже есть источник в каталоге модулей.
Ответ 3
Простой grep над кодом помог бы:
http://svn.python.org/view/python/trunk/Modules/cmathmodule.c?revision=76978&view=markup
Ответ 4
Я не уверен, где найти точный алгоритм, используемый 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
Надеюсь, вы увидите рисунок. Я также надеюсь, что это помогло вам!:)