Степень в 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
А как возводить число в куб?
К примеру у меня есть переменная
number
, и значение у переменной будет5
. Мне нужно значение переменной возвести в куб.Чтобы возвести число в куб в Python, используйте
** 3
:number = 5 print(number ** 3) > 125