Простой Python. Современный стиль программирования (Любанович) - страница 253

>>>> math.log(1.0)

>0.0

>>>> math.log(math.e)

>1.0

Если вы хотите задать другое основание логарифма, передайте его как второй аргумент:

>>>> math.log(8, 2)

>3.0

Функция pow() возвращает противоположный результат, возводя число в степень:

>>>> math.pow(2, 3)

>8.0

Python имеет также встроенный оператор экспоненты **, делающий то же самое, но он не преобразует автоматически результат к числу с плавающей точкой, если основание и степень были целыми числами:

>>>> 2**3

>8

>>>> 2.0**3

>8.0

Получаем квадратный корень с помощью функции sqrt():

>>>> math.sqrt(100.0)

>10.0

Не пытайтесь обмануть эту функцию, она уже все это видела:

>>>> math.sqrt(-100.0)

>Traceback (most recent call last):

>··File "", line 1, in

>ValueError: math domain error

Здесь имеются также обычные тригонометрические функции, я просто приведу их названия: sin(), cos(), tan(), asin(), acos(), atan() и atan2(). Если вы помните теорему Пифагора (или хотя бы можете произнести ее название быстро три раза, не начав плеваться), библиотека math предоставит вам также функцию hypot(), которая рассчитывает гипотенузу на основании длины двух катетов:

>>>> x = 3.0

>>>> y = 4.0

>>>> math.hypot(x, y)

>5.0

Если вы не доверяете таким функциям, можете сделать все самостоятельно:

>>>> math.sqrt(x*x + y*y)

>5.0

>>>> math.sqrt(x**2 + y**2)

>5.0

Последний набор функций преобразует угловые координаты:

>>>> math.radians(180.0)

>3.141592653589793

>>>> math.degrees(math.pi)

>180.0

Работа с комплексными числами

Комплексные числа полностью поддерживаются основой языка Python в традиционной нотации с мнимой и действительной частями:

>>>> # действительное число

>… 5

>5

>>>> # мнимое число

>… 8j

>8j

>>>> # мнимое число

>… 3 + 2j

>(3+2j)

Поскольку мнимое число i (в Python оно записывается как 1j) определено как квадратный корень из –1, мы можем выполнить следующее:

>>>> 1j * 1j

>(-1+0j)

>>>> (7 + 1j) * 1j

>(-1+7j)

Некоторые математические функции для комплексных чисел содержатся в стандартном модуле cmath.

Рассчитываем точное значение чисел с плавающей точкой с помощью decimal

Числа с плавающей точкой в вычислительной технике не похожи на настоящие числа, которые мы изучали в школе. Из-за того что компьютеры разрабатывались для бинарной математики, числа, не являющиеся равными степени двойки, зачастую не могут быть выражены точно:

>>>> x = 10.0 / 3.0

>>>> x

>3.3333333333333335

Эй, что это за пятерка в конце? На ее месте должна быть тройка. С помощью модуля decimal (http://docs.python.org/3/library/decimal.html) вы можете записывать числа с желаемым уровнем точности. Это особенно важно для расчетов денежных сумм. Сумма в валюте Соединенных Штатов не может быть меньше 1 цента (сотая часть доллара), поэтому, если мы подсчитываем количество долларов и центов, нам нужно считать все до копеечки. Если мы попробуем представить доллары и центы как значения с плавающей точкой вроде 19,99 или 0,06, то потеряем некоторую часть точности в последних битах еще до начала вычислений. Как с этим справиться? Легко. Нам нужно использовать модуль decimal: