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