Степень в Python — как возвести?

Когда я был студентом, мой преподаватель по методам программирования любил повторять: "В математике все идеи простые". Чаще всего, фраза звучала в момент объяснения новой сложной темы, а потому вызывала определённые внутренние противоречия.

С возведением в степень всё не так — это действительно простая операция.

История

Возведение в степень — частный случай умножения, поэтому данную операцию изначально не рассматривали, как самостоятельную. Но уже в работах Диофанта Александрийского степени отведено особое место. В частности "Отец Алгебры" применял понятия кубов и квадратов числа.

Возведение в степень определяется как результат n-кратного умножения числа самого на себя.

Эта операция была известна ещё в древнем Вавилоне, однако современный её вид устоялся лишь в XVII веке.

Как умножение позволяет сократить количество символов сложения:

6 + 6 + 6 + 6 + 6 + 6 = 6 * 6

Так и степень сокращает запись умножения:

  • 6 — это основание;
  • 2 — показатель степени (это число говорит о том, сколько раз число в основании должно быть умножено само на себя).

До воцарения числового показателя, были и другие варианты его записи. Математики раннего Возрождения использовали буквы. Например, Q обозначала квадрат, а C — куб. Различные формы записи возведения в степень не обошли и языки программирования.

Для АЛГОЛа и некоторых диалектов Бейсика применяется значок ↑. В матлабе, R, Excel-е и Хаскеле используется "циркумфлекс" — ^ или "галочка". Этот символ популярен и вне программирования.

Определение

В Python возведение в степень записывается при помощи двойной "звёздочки" — "**"

a = 2 ** 4 print(a) > 16

Вторая форма записи — встроенная функция 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)))) > <class 'complex'>

В остальном возведение в рациональную степень работает, как и для целочисленной:

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
😭
😕
😃
😍
закрыть