Как взять корень в питоне

Как взять корень в питоне

В Python 2.7.8 не получается найти корень квадратный и экспоненту.

3 Answers

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

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

Для того, чтобы найти квадратный корень, можно ещё использовать оператор возведения в степень или функцию pow (так как квадратный корень это возведение в степень 0.5):

Под извлечением корня из какого-либо числа чаще всего подразумевают нахождение решение уравнения x в степени n = value, соответственно для квадратного корня, число n — это два, для кубического — 3. Чаще всего под результатом и числом подразумеваются вещественные числа.

В программировании нахождение корней используется очень часто. Разберемся, как и какими методами можно эффективно извлекать корни из числа. Вначале рассмотрим, какие способы есть в Python, и определим самый эффективный. Потом более подробно разберём, как можно найти не только квадратный корень из числа, но и кубический, и потом корень n степени.

Способы извлечения корня

В языке программирования Python 3 существует три способа извлечения корней:

  • Использование функции sqrt из стандартной математической библиотеки math.
  • Операция возведения в степень **
  • Применение функции pow(x, n)

Чтобы воспользоваться первым способом, необходимо вначале импортировать sqrt из модуля math. Это делается с помощью ключевого слова import: from math import sqrt . При помощи этой функции можно извлекать только квадратный корень из числа. Приведем пример:

Если же нам нужно вычислить в Python корень квадратный из суммы квадратов, то можно воспользоваться функцией hypot из модуля math. Берется сумма квадратов аргументов функции, из нее получается корень. Аргументов у функции два.

Еще одним, чуть более универсальным методом, будет использование возведения в степень. Известно, что для того, чтобы взять корень n из числа, необходимо возвести его в степень 1/n. Соответственно, извлечение квадратного корня из числа 4 будет выглядеть так:

Последний метод использует функцию pow(value, n). Эта функция в качестве аргумента value возьмет число, которое необходимо возвести в степень, а второй аргумент будет отвечать за степень числа. Как и в предыдущем методе, необходимо использовать дробь, для того, чтобы получить корень числа.

Какой метод быстрее?

Для того, чтобы определить какой же метод предпочтительнее использовать, напишем программу. Замерять время выполнения будем с помощью метода monotonic библиотеки time.

Читайте также:  Как настроить интернет на телефоне texet

Как видно, самое быстрое решение – использовать **. На втором месте метод sqrt, а pow – самый медленный. Правда, метод sqrt наиболее нагляден при вычислении в Python квадратных корней.

Квадратный корень

Для извлечения квадратного корня самым наглядным способом, правда не самым быстрым, будет использование sqrt из модуля math.

Но можно использовать и трюки с возведением в степень 1/2, что тоже будет приводить к нужному результату.

x = value ** (0.5) или x = pow(value, 0.5) .

Кубический корень

Для извлечения кубического корня в Python 3 метод sqrt не подойдет, поэтому воспользуйтесь возведением в степень 1/3:

x = value ** (1./3) или x=pow(value, 1/3) .

Корень n-степени

Корень n-степени из числа в Python извлекается можно получить двумя способами с помощью возведения в степень 1.0/n:

  • С помощью оператора **.
  • Используя функцию pow.

Как было проверено выше, оператор ** быстрее. Поэтому его использовать более целесообразно. Приведем пример вычисления кубических корней в Python 3 с помощью этих двух методов:

Корень отрицательного числа

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

Как видим, функция sqrt выдаёт исключение.

Теперь посмотрим, что будет при использовании других методов.

Как видно из результата, оператор ** не выдает исключения и возвращает некорректный результат. Функция pow работает корректно. В результате получаем комплексное число 2j, что является верным.

Вывод

В Python существуют два универсальных способа для извлечения корня из числа. Это возведение в необходимую степень 1/n. Кроме того, можно воспользоваться функцией из математического модуля языка, если необходимо извлечь квадратный корень числа.

Все эти методы имеют свои преимущества и недостатки. Самый наглядный это sqrt, но подходит только для квадратный корней из числа. Остальные методы не такие элегантные, но легко могут извлечь корень нужной степени из числа. Кроме того оператор ** оказался наиболее быстрым при тестировании.

Необходимо также помнить про целочисленное деление, неправильное использование которого может приводить к ошибке в вычислении.

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

Популярные теги

Похожие вопросы

Почему `virtualenv` не может найти` pkg_resources`?

создание фрейма данных панд из нескольких файлов

IOError: [Errno 2] Нет такого файла или каталога Python

Читайте также:  Стиральная машина вирпул ошибка f 08

Настройка формата изображения 3D-графика

регулярное выражение python с вопросом utf8

Есть ли целочисленный квадратный корень где-нибудь в python или в стандартных библиотеках? Я хочу, чтобы он был точным (т.е. возвращал целое число), и лаял, если нет решения.

На данный момент я накатил свой собственный наивный:

Но это уродливо, и я не очень доверяю этому для больших целых чисел. Я мог бы перебрать квадраты и сдаться, если я превысил значение, но я предполагаю, что сделать что-то подобное будет довольно медленно. Кроме того, я думаю, что, вероятно, я бы заново изобрел колесо, что-то подобное наверняка уже существует в python .

Ответы на вопрос ( 10 )

Длинноугольный алгоритм квадратного корня

Оказывается, есть алгоритм для вычисления квадратных корней, который вы можете вычислить вручную, что-то вроде длинного деления. Каждая итерация алгоритма создает ровно одну цифру полученного квадратного корня, в то же время потребляя две цифры числа, квадратный корень которого вы ищете. Хотя версия алгоритма «длинная стрелка» указана в десятичном формате, он работает в любой базе, причем двоичный код проще всего реализовать и, возможно, быстрее всего выполнить (в зависимости от базового представления bignum).

Поскольку этот алгоритм работает с числами цифра за цифрой, он дает точные результаты для произвольно больших совершенных квадратов, а для неидеальных квадратов может давать столько цифр точности (справа от десятичного знака), сколько необходимо.

На сайте "Dr. Math" есть две хорошие рецензии, которые объясняют алгоритм:

И вот реализация в Python:

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

Я не уверен, как это сравнивается с алгоритмом "целочисленного метода Ньютона". Я подозреваю, что метод Ньютона быстрее, поскольку он в принципе может генерировать несколько битов решения за одну итерацию, в то время как алгоритм «длинной руки» генерирует ровно один бит решения за одну итерацию.

в 2,4 раза быстрее! Самая большая оптимизация заключалась в переписывании функции range для выполнения вдвое меньшего числа итераций, но я массировал каждую строку, чтобы выжать любую возможную производительность. Пожалуйста, проверьте мою версиюВот и я благодарен за прекрасную отправную точку.

Попробуйте это условие (без дополнительных вычислений):

Читайте также:  Активный режим андроид как отключить

Если вам нужно вернуть int (не float с конечным нулем), либо назначьте 2-ю переменную или вычислите int(i) дважды.

обнаружив, что этот самый быстрый и не требует математического импорта. Очень долго может потерпеть неудачу, но посмотрите на это

Существуетрецепт на сайте ActiveState который, как мы надеемся, должен быть более надежным, поскольку он использует только целочисленные математические выражения. Он основан на более раннем вопросе StackOverflow:Написание вашей собственной функции квадратного корня

Вот очень простая реализация:

Это просто бинарный поиск. Инициализировать значение m чтобы быть наибольшей степенью 2, которая не превышает квадратный корень, проверьте, можно ли установить каждый меньший бит, сохраняя результат не больше квадратного корня. (Проверяйте биты по одному в порядке убывания.)

Для достаточно больших значений n (скажем, вокруг 10**6000 или около 20000 биты), это выглядит так:

Быстрее, чем реализация метода Ньютонаописано пользователем448810.Гораздо медленнее, чем gmpy2 встроенный метод вмой другой ответ.Сравнимо, но несколько медленнее, чем Longhand Square Rootописывается нибот.

Все эти подходы успешны на входах такого размера, но на моем компьютере эта функция занимает около 1,5 секунд, в то время как @ Nibot занимает около 0,9 секунд, @ user448810 — около 19 секунд, а встроенный метод gmpy2 — менее миллисекунды. (!). Пример:

Эта функция может быть легко обобщена, хотя она не так хороша, потому что у меня нет такой точной первоначальной оценки m :

Тем не менее, обратите внимание, что gmpy2 также имеет i_root метод.

Фактически этот метод может быть адаптирован и применен к любой (неотрицательной, возрастающей) функции f определить "целое число, обратное f Однако, чтобы выбрать эффективное начальное значение m Вы все еще хотите узнать что-то о f .

Редактировать: Спасибо @Greggo за указание на то, что i_sqrt Функция может быть переписана, чтобы избежать использования каких-либо умножений. Это дает впечатляющий прирост производительности!

Обратите внимание, что по конструкции k й бит m не установлен, поэтому побитовый или может быть использован для реализации добавления (m , В конечном итоге у меня есть (2*m*(2**k) + 2**(2*k)) написано как (((m таким образом, это три смены и одна побитовая или (с последующим вычитанием, чтобы получить new_diff ). Может быть, есть еще более эффективный способ получить это? Несмотря на это, это намного лучше, чем умножение m*m ! Сравните с выше:

Ссылка на основную публикацию
Как ввести пароль в терминале ubuntu
Если довольно часто работаешь в операционных системах семейства Linux, например в такой популярной среди пользователей системе как Ubuntu, обязательно сталкиваешься...
Используется устаревшая версия webclientsigner как исправить
Название Инструкция по обновлению клиента электронной подписи 1 Удалите компонент электронной подписи WebClientSignerSetup. Для этого нажмите «ПускВсе программыКристаРегиональная контрактная системаРабота...
Исходные объекты не компланарны в автокаде
Компланарность — свойство трёх (или большего числа) векторов, которые, будучи приведёнными к общему началу, лежат в одной плоскости [1] ....
Как взять корень в питоне
В Python 2.7.8 не получается найти корень квадратный и экспоненту. 3 Answers Как уже написали ранее, можно воспользоваться функциями из...
Adblock detector