Подтвердить что ты не робот

Где я могу проверить математические функции Python?

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

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

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

4b9b3361

Ответ 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, вам придется найти его в исходном коде. Если у вас уже есть источник в каталоге модулей.

Ответ 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

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