- Степень в Python — как возвести?
- История
- Определение
- Обратные операции
- Извлечение корня
- Логарифмирование
- Степень
- Целочисленная
- Рациональная
- Вещественная
- Ноль в степени ноль
- Возведение числа в степень на Python
- Оператор ** для возведения в степень
- pow() или math.power() для возведения в степень
- numpy.np() для возведения в степень
- Сравнение времени работы разных решений
- Нахождение степени числа с использованием рекурсии
- Решение задачи
- Исходный код
- Объяснение работы программы
- Результаты работы программы
Степень в Python — как возвести?
Когда я был студентом, мой преподаватель по методам программирования любил повторять: «В математике все идеи простые». Чаще всего, фраза звучала в момент объяснения новой сложной темы, а потому вызывала определённые внутренние противоречия.
С возведением в степень всё не так — это действительно простая операция.
История
Возведение в степень — частный случай умножения, поэтому данную операцию изначально не рассматривали, как самостоятельную. Но уже в работах Диофанта Александрийского степени отведено особое место. В частности «Отец Алгебры» применял понятия кубов и квадратов числа.
Эта операция была известна ещё в древнем Вавилоне, однако современный её вид устоялся лишь в XVII веке.
Как умножение позволяет сократить количество символов сложения:
Так и степень сокращает запись умножения:
- 6 — это основание;
- 2 — показатель степени (это число говорит о том, сколько раз число в основании должно быть умножено само на себя).
До воцарения числового показателя, были и другие варианты его записи. Математики раннего Возрождения использовали буквы. Например, Q обозначала квадрат, а C — куб. Различные формы записи возведения в степень не обошли и языки программирования.
Для АЛГОЛа и некоторых диалектов Бейсика применяется значок ↑. В матлабе, R, Excel-е и Хаскеле используется «циркумфлекс» — ^ или «галочка». Этот символ популярен и вне программирования.
Определение
В Python возведение в степень записывается при помощи двойной «звёздочки» — » ** «
Вторая форма записи — встроенная функция pow():
# первый аргумент — основание, а второй — показатель b = pow(2, 4) print(b) > 16
Обратные операции
Извлечение корня
У возведения в степень две обратные операции. Первая — извлечение корня. Подробнее о корнях в Python вы можете почитать в нашей статье . Отметим лишь, что корень в питоне вычисляется с помощью той же функции pow():
# корень четвёртой степени из 16 root = pow(16, (1/4)) print(root) > 2.0
Либо с применением оператора » ** «:
# корень кубический из 27 cub_root = 27 ** (1/3) print(cub_root) > 3.0
Для извлечения квадратного корня справедливы оба вышеуказанных способа, но существует и третий, специализированный. Для его применения требуется импортировать модуль math :
import math # квадратный корень из 100 sqr_root = math.sqrt(100) print(sqr_root) > 10.0
Логарифмирование
Логарифмирование — вторая обратная операция.
Логарифмом числа «b» по основанию «a» зовётся такой показатель степени, в который следует возвести «a», чтобы получить «b».
Здесь x — логарифм. Пример из математики — найдем значение выражения:
Легче всего эта запись читается в формате вопроса: «В какую степень нужно возвести 2, чтобы получить 16?». Очевидно, в 4-ю. Следовательно,
В питоне операция нахождения логарифма также заложена в функционал модуля math:
import math # отыщем логарифм 100 по основанию 10 # 100 — основание логарифма, а 10 — аргумент log = math.log(100, 10) print(log) > 2.0
Степень
Целочисленная
В целочисленную степень можно возводить положительные и отрицательные int и float числа:
# int print(3 ** 9) > 19683 print(pow(-2, 10)) > 1024 # float print(3.14 ** 9) > 29673.367320587102 print(pow(-1.1, 1001)) > -2.7169262098066285e+41
И функция pow() и оператор » ** » умеют возводить комплексные числа:
# complex a = complex(2, 1) print(pow(a, 2)) > (3+4j) print(a ** 2) > (3+4j)
Показатель степени может быть положительным, отрицательным и нулевым:
# + print(12 ** 4) > 20736 # — print(100 ** -2) > 0.0001 # 0 print(1231 ** 0) > 1
Результат не определён, когда 0 возводят в отрицательную степень:
print(0 ** -4) > ZeroDivisionError: 0.0 cannot be raised to a negative power
Ошибка деления на ноль возникает из-за следующего свойства степени:
Рациональная
Возведение числа в рациональную степень напрямую связано с извлечением корня из этого числа отношением:
Если рациональный показатель отрицательный, а основание равно нулю, то Питон все ещё будет выдавать ошибку:
print(0 ** -(5/4)) > ZeroDivisionError: 0.0 cannot be raised to a negative power
В случае, когда основание меньше нуля, числитель показателя нечётный, а знаменатель, напротив, чётный, результат получается комплексным. Но это свойство рациональных степеней учитывается только в функции pow() :
print(pow(-5, (5/4))) > (-5.286856317202822-5.286856317202821j) print(type(pow(-5, (5/4)))) >
В остальном возведение в рациональную степень работает, как и для целочисленной:
print(0 ** (3/2)) > 0.0 print(pow(1, (23/24))) > 1.0 print(10 ** (6/7)) > 7.196856730011519
Вещественная
В начале автор объявил, что возведение в степень — штука несложная. Так вот, для вещественных степеней это уже не совсем так. Идеи, заложенные в эту операцию, хоть и просты, но их много, и каждая из них достойна собственной статьи. Описать вкратце разложение в ряд Тейлора и численное интегрирование не получится. Это будет не справедливо, как по отношению к вам, так и к математике. Поэтому, выделим главное:
Python умеет возводить в вещественную степень даже вещественные числа (пусть и псевдо)
Сделать такое инструментами математики ой как непросто:
# возведём число Пи в степень e print(pow(math.pi, math.e)) > 22.45915771836104
Ноль в степени ноль
Дискуссии по поводу значения 0 в степени 0 продолжаются уже больше двух веков. Обычно значение нуля в нулевой степени принято считать неопределённым, но символическое соглашение о том, что «0 в степени 0 равно 1» помогает в записи формул и алгоритмов. Ровно поэтому так сделано и в Python:
print(pow(0, 0)) > 1 print(0 ** 0) > 1
Возведение числа в степень на Python
В этом руководстве разберем процесс возведения в степень в Python.
В математике возведение в степень — это операция, при которой число умножается само на себя несколько раз. Python предоставляет встроенные операторы и функции для выполнения возведения в степень.
Оператор ** для возведения в степень
Многие разработчики считают, что символ карет ( ^ ) — это оператор возведения числа в степень, ведь именно он обозначает эту операцию в математике. Однако в большинстве языков программирования этот знак выступает в качестве побитового xor .
В Python оператор возведения в степень обозначается двумя символами звездочки ** между основанием и числом степени.
Функциональность этого оператора дополняет возможности оператора умножения * : разница лишь в том, что второй оператор указывает на то, сколько раз первые операнд будет умножен сам на себя.
Чтобы умножить число 5 само на себя 6 раз, используется ** между основанием 5 и операндом степени 6. Вывод:
Проверим оператор с другими значениями.
Инициализируем целое число, отрицательное целое, ноль, два числа с плавающей точкой float , одно больше нуля, а второе — меньше. Степеням же присвоим случайные значения.
num1 = 2 num2 = -5 num3 = 0 num4 = 1.025 num5 = 0.5 print(num1, '^12 =', num1**12) print(num2, '^4 =', num2**4) print(num3, '^9999 =', num3**9999) print(num4, '^-3 =', num4**-3) print(num5, '^8 =', num5**8)2 ^12 = 4096 -5 ^4 = 625 0 ^9999 = 0 1.025 ^-3 = 0.928599410919749 0.5 ^8 = 0.00390625
pow() или math.power() для возведения в степень
Также возводить в степень в Python можно с помощью функции pow() или модуля math, в котором есть своя реализация этого же модуля.
В обе функции нужно передать два аргумента: основание и саму степень. Попробуем вызвать обе функции и посмотрим на результат.
import math print(pow(-8, 7)) print(math.pow(-8, 7)) print(pow(2, 1.5)) print(math.pow(2, 1.5)) print(pow(4, 3)) print(math.pow(4,3)) print(pow(2.0, 5)) print(math.pow(2.0, 5))-2097152 -2097152.0 2.8284271247461903 2.8284271247461903 64 64.0 32.0 32.0
Отличие лишь в том, что math.pow() всегда возвращает значение числа с плавающей точкой, даже если передать целые числа. А вот pow() вернет число с плавающей точкой, если таким же был хотя бы один из аргументов.
numpy.np() для возведения в степень
В модуле numpy есть своя функция power() для возведения в степень. Она принимает те же аргументы, что и pow() , где первый — это основание, а второй — значение степени.
print(np.power(-8, 7)) print(np.power(2, 1.5)) print(np.power(4, 3)) print(np.power(2.0, 5))-2097152 2.8284271247461903 64 32.0
Как получить квадрат числа в Python?
Для возведения числа в квадрат, нужно указать 2 в качестве степени. Встроенной функции для получения квадрата в Python нет.
Например, квадрат числа 6 — 6**2 —> 36.Сравнение времени работы разных решений
Теперь сравним, сколько занимает выполнение каждой из трех функций и оператора ** . Для этого используем модуль timeit .
Основанием будет 2, а значением степени — 9999999.
import numpy as np import math import time start = time.process_time() val = 2**9999999 print('** за', time.process_time() - start, 'ms') start = time.process_time() val = pow(2, 9999999) print('pow() за', time.process_time() - start, 'ms') start = time.process_time() val = np.power(2, 9999999) print('np.power() за', time.process_time() - start, 'ms') start = time.process_time() val = math.pow(2, 9999999) print('math.pow() за', time.process_time() - start, 'ms')** за 0.078125 ms pow() за 0.0625 ms np.power() за 0.0 ms Traceback (most recent call last): File "C:\Programs\Python\Python38\test.py", line 18, in val = math.pow(2, 9999999) OverflowError: math range error
В первую очередь можно обратить внимание на то, что math.pow() вернула ошибку OverflowError . Это значит, что функция не поддерживает крупные значения степени.
Различия между остальными достаточно простые, но можно увидеть, что np.power() — самая быстрая.
Нахождение степени числа с использованием рекурсии
Программа принимает на вход число и его степень, и при помощи рекурсии вычисляет результат.
Решение задачи
- Принимаем на вход число и значение его степени, записываем их в отдельные переменные.
- Передаем эти переменные в качестве аргументов в рекурсивную функцию.
- Определяем в качестве базового условия рекурсии равенство степени 1 . В этом случае функция выводит само число, так как любое число в степени 1 равно само себе.
- В противном случае мы выводим произведение числа на эту же функцию, в которой второй аргумент, степень, уменьшен на 1 .
- Выводим конечный результат на экран.
- Конец.
Исходный код
Ниже дан исходный код, который осуществляет возведение числа в степень с использованием рекурсии. Результаты работы программы также даны ниже.
def power(base, exp): if (exp == 1): return (base) if (exp != 1): return (base * power(base, exp - 1)) base = int(input("Введите число: ")) exp = int(input("Введите его степень: ")) print("Результат возведения в степень равен:", power(base, exp))Объяснение работы программы
- Принимаем на вход число и значение его степени, записываем их в отдельные переменные base и exp соответственно.
- Передаем эти переменные в качестве аргументов в рекурсивную функцию power() .
- Определяем в качестве базового условия рекурсии exp == 1 . В этом случае функция выводит само число из переменной base , так как любое число в степени 1 равно само себе.
- В противном случае мы выводим произведение числа на эту же функцию, в которой второй аргумент (степень) уменьшен на единицу: base * power(base, exp - 1) . Таким образом мы накапливаем произведение числа, хранящегося в переменной base , самого на себя ровно exp раз, что эквивалентно возведению числа base в степень exp .
- Выводим конечный результат на экран.
Результаты работы программы
Пример 1: Введите число: 2 Введите его степень: 5 Результат возведения в степень равен: 32 Пример 2: Введите число: 5 Введите его степень: 3 Результат возведения в степень равен: 125