Где я могу проверить математические функции 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 sysprint sys.builtin_module_names

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

Я не уверен, где найти точный алгоритм, используемый 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

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

Другие вопросы по тегам