> **Источник:** https://python-all.ru/3.16/library/math.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `math` – Математические функции

---

Этот модуль предоставляет доступ к распространённым математическим функциям и константам, в том числе определённым стандартом C.

Эти функции нельзя использовать с комплексными числами; если нужна поддержка комплексных чисел, используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/3.16/library/cmath.html#module-cmath). Различие между функциями, поддерживающими комплексные числа, и теми, которые их не поддерживают, проведено потому, что большинству пользователей не нужно углубляться в математику, необходимую для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить непредвиденное комплексное число, переданное в качестве параметра, так что программист может выяснить, как и почему оно возникло.

Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.

| **Арифметика с плавающей запятой** |  |
| --- | --- |
| [`ceil(x)`](https://python-all.ru/3.16/library/math.html#math.ceil) | Потолок *x* – наименьшее целое число, большее или равное *x* |
| [`fabs(x)`](https://python-all.ru/3.16/library/math.html#math.fabs) | Абсолютное значение *x* |
| [`floor(x)`](https://python-all.ru/3.16/library/math.html#math.floor) | Пол *x* – наибольшее целое число, меньшее или равное *x* |
| [`fma(x, y, z)`](https://python-all.ru/3.16/library/math.html#math.fma) | Совмещённая операция умножения-сложения: `(x * y) + z` |
| [`fmax(x, y)`](https://python-all.ru/3.16/library/math.html#math.fmax) | Максимум двух значений с плавающей запятой |
| [`fmin(x, y)`](https://python-all.ru/3.16/library/math.html#math.fmin) | Минимум двух значений с плавающей запятой |
| [`fmod(x, y)`](https://python-all.ru/3.16/library/math.html#math.fmod) | Остаток от деления `x / y` |
| [`modf(x)`](https://python-all.ru/3.16/library/math.html#math.modf) | Дробная и целая части *x* |
| [`remainder(x, y)`](https://python-all.ru/3.16/library/math.html#math.remainder) | Остаток от деления *x* на *y* |
| [`trunc(x)`](https://python-all.ru/3.16/library/math.html#math.trunc) | Целая часть *x* |
| **Функции для работы с числами с плавающей запятой** |  |
| [`copysign(x, y)`](https://python-all.ru/3.16/library/math.html#math.copysign) | Модуль (абсолютное значение) *x* со знаком *y* |
| [`frexp(x)`](https://python-all.ru/3.16/library/math.html#math.frexp) | Мантисса и экспонента *x* |
| [`isclose(a, b, rel_tol, abs_tol)`](https://python-all.ru/3.16/library/math.html#math.isclose) | Проверяет, близки ли значения *a* и *b* друг к другу |
| [`isfinite(x)`](https://python-all.ru/3.16/library/math.html#math.isfinite) | Проверить, не является ли *x* ни бесконечностью, ни NaN |
| [`isnormal(x)`](https://python-all.ru/3.16/library/math.html#math.isnormal) | Проверяет, является ли *x* нормальным числом |
| [`issubnormal(x)`](https://python-all.ru/3.16/library/math.html#math.issubnormal) | Проверяет, является ли *x* субнормальным числом |
| [`isinf(x)`](https://python-all.ru/3.16/library/math.html#math.isinf) | Проверить, является ли *x* положительной или отрицательной бесконечностью |
| [`isnan(x)`](https://python-all.ru/3.16/library/math.html#math.isnan) | Проверить, является ли *x* значением NaN (не число) |
| [`ldexp(x, i)`](https://python-all.ru/3.16/library/math.html#math.ldexp) | `x * (2**i)`, обратная функция к [`frexp()`](https://python-all.ru/3.16/library/math.html#math.frexp) |
| [`nextafter(x, y, steps)`](https://python-all.ru/3.16/library/math.html#math.nextafter) | Число с плавающей запятой, отстоящее от *x* на *steps* шагов в направлении *y* |
| [`signbit(x)`](https://python-all.ru/3.16/library/math.html#math.signbit) | Проверяет, является ли *x* отрицательным числом |
| [`ulp(x)`](https://python-all.ru/3.16/library/math.html#math.ulp) | Значение наименьшего значащего бита *x* |
| **Степенные, экспоненциальные и логарифмические функции** |  |
| [`cbrt(x)`](https://python-all.ru/3.16/library/math.html#math.cbrt) | Кубический корень из *x* |
| [`exp(x)`](https://python-all.ru/3.16/library/math.html#math.exp) | *e* в степени *x* |
| [`exp2(x)`](https://python-all.ru/3.16/library/math.html#math.exp2) | *2* в степени *x* |
| [`expm1(x)`](https://python-all.ru/3.16/library/math.html#math.expm1) | *e* в степени *x* минус 1 |
| [`log(x, base)`](https://python-all.ru/3.16/library/math.html#math.log) | Логарифм *x* по заданному основанию (по умолчанию *e*) |
| [`log1p(x)`](https://python-all.ru/3.16/library/math.html#math.log1p) | Натуральный логарифм *1+x* (по основанию *e*) |
| [`log2(x)`](https://python-all.ru/3.16/library/math.html#math.log2) | Двоичный логарифм *x* |
| [`log10(x)`](https://python-all.ru/3.16/library/math.html#math.log10) | Десятичный логарифм *x* |
| [`pow(x, y)`](https://python-all.ru/3.16/library/math.html#math.pow) | *x* в степени *y* |
| [`sqrt(x)`](https://python-all.ru/3.16/library/math.html#math.sqrt) | Квадратный корень *x* |
| **Функции суммирования и произведения** |  |
| [`dist(p, q)`](https://python-all.ru/3.16/library/math.html#math.dist) | Евклидово расстояние между двумя точками *p* и *q*, заданными как итерируемый объект координат |
| [`fsum(iterable)`](https://python-all.ru/3.16/library/math.html#math.fsum) | Сумма значений во входном *iterable* |
| [`hypot(*coordinates)`](https://python-all.ru/3.16/library/math.html#math.hypot) | Евклидова норма итерируемого объекта координат |
| [`prod(iterable, start)`](https://python-all.ru/3.16/library/math.html#math.prod) | Произведение элементов во входном *iterable* с начальным значением *start* |
| [`sumprod(p, q)`](https://python-all.ru/3.16/library/math.html#math.sumprod) | Сумма произведений из двух итерируемых объектов *p* и *q* |
| **Преобразование угловых величин** |  |
| [`degrees(x)`](https://python-all.ru/3.16/library/math.html#math.degrees) | Преобразовать угол *x* из радианов в градусы |
| [`radians(x)`](https://python-all.ru/3.16/library/math.html#math.radians) | Преобразовать угол *x* из градусов в радианы |
| **Тригонометрические функции** |  |
| [`acos(x)`](https://python-all.ru/3.16/library/math.html#math.acos) | Арккосинус *x*, в радианах |
| [`acospi(x)`](https://python-all.ru/3.16/library/math.html#math.acospi) | Арккосинус *x*, в полуоборотах |
| [`asin(x)`](https://python-all.ru/3.16/library/math.html#math.asin) | Арксинус *x*, в радианах |
| [`asinpi(x)`](https://python-all.ru/3.16/library/math.html#math.asinpi) | Арксинус *x*, в полуоборотах |
| [`atan(x)`](https://python-all.ru/3.16/library/math.html#math.atan) | Арктангенс *x*, в радианах |
| [`atanpi(x)`](https://python-all.ru/3.16/library/math.html#math.atanpi) | Арктангенс *x*, в полуоборотах |
| [`atan2(y, x)`](https://python-all.ru/3.16/library/math.html#math.atan2) | `atan(y / x)`, в радианах |
| [`atan2pi(y, x)`](https://python-all.ru/3.16/library/math.html#math.atan2pi) | `atan(y / x)`, в полуоборотах |
| [`cos(x)`](https://python-all.ru/3.16/library/math.html#math.cos) | Косинус *x* радиан |
| [`cospi(x)`](https://python-all.ru/3.16/library/math.html#math.cospi) | Косинус *x⋅π* радиан |
| [`sin(x)`](https://python-all.ru/3.16/library/math.html#math.sin) | Синус *x* радиан |
| [`sinpi(x)`](https://python-all.ru/3.16/library/math.html#math.sinpi) | Синус *x⋅π* радиан |
| [`tan(x)`](https://python-all.ru/3.16/library/math.html#math.tan) | Тангенс *x* радиан |
| [`tanpi(x)`](https://python-all.ru/3.16/library/math.html#math.tanpi) | Тангенс *x⋅π* радиан |
| **Гиперболические функции** |  |
| [`acosh(x)`](https://python-all.ru/3.16/library/math.html#math.acosh) | Обратный гиперболический косинус *x* |
| [`asinh(x)`](https://python-all.ru/3.16/library/math.html#math.asinh) | Обратный гиперболический синус *x* |
| [`atanh(x)`](https://python-all.ru/3.16/library/math.html#math.atanh) | Обратный гиперболический тангенс *x* |
| [`cosh(x)`](https://python-all.ru/3.16/library/math.html#math.cosh) | Гиперболический косинус *x* |
| [`sinh(x)`](https://python-all.ru/3.16/library/math.html#math.sinh) | Гиперболический синус *x* |
| [`tanh(x)`](https://python-all.ru/3.16/library/math.html#math.tanh) | Гиперболический тангенс *x* |
| **Специальные функции** |  |
| [`erf(x)`](https://python-all.ru/3.16/library/math.html#math.erf) | [Функция ошибок](https://python-all.ru/3.16/library/math.html) при *x* |
| [`erfc(x)`](https://python-all.ru/3.16/library/math.html#math.erfc) | [Дополнительная функция ошибок](https://python-all.ru/3.16/library/math.html) при *x* |
| [`gamma(x)`](https://python-all.ru/3.16/library/math.html#math.gamma) | [Гамма-функция](https://python-all.ru/3.16/library/math.html) при *x* |
| [`lgamma(x)`](https://python-all.ru/3.16/library/math.html#math.lgamma) | Натуральный логарифм абсолютного значения [гамма-функции](https://python-all.ru/3.16/library/math.html) при *x* |
| **Константы** |  |
| [`pi`](https://python-all.ru/3.16/library/math.html#math.pi) | *π* = 3.141592… |
| [`e`](https://python-all.ru/3.16/library/math.html#math.e) | *e* = 2.718281… |
| [`tau`](https://python-all.ru/3.16/library/math.html#math.tau) | *τ* = 2*π* = 6.283185… |
| [`inf`](https://python-all.ru/3.16/library/math.html#math.inf) | Положительная бесконечность |
| [`nan`](https://python-all.ru/3.16/library/math.html#math.nan) | «Не число» (NaN) |

## Арифметика с плавающей запятой

#### `math.ceil(x)`

Возвращает потолок *x* – наименьшее целое число, большее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение [`x.__ceil__`](https://python-all.ru/3.16/reference/datamodel.html#object.__ceil__), которая должна вернуть значение типа [`Integral`](https://python-all.ru/3.16/library/numbers.html#numbers.Integral).

#### `math.fabs(x)`

Возвращает абсолютное значение *x*.

#### `math.floor(x)`

Возвращает пол *x* – наибольшее целое число, меньшее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение [`x.__floor__`](https://python-all.ru/3.16/reference/datamodel.html#object.__floor__), которая должна вернуть значение типа [`Integral`](https://python-all.ru/3.16/library/numbers.html#numbers.Integral).

#### `math.fma(x, y, z)`

Совмещённая операция умножения-сложения. Возвращает `(x * y) + z`, вычисленное как будто с бесконечной точностью и диапазоном, после чего следует однократное округление до формата `float`. Эта операция часто обеспечивает лучшую точность, чем прямое выражение `(x * y) + z`.

Эта функция следует спецификации операции fusedMultiplyAdd, описанной в стандарте IEEE 754. Стандарт оставляет один случай определённым реализацией, а именно результат `fma(0, inf, nan)` и `fma(inf, 0, nan)`. В этих случаях `math.fma` возвращает NaN и не возбуждает никаких исключений.

Добавлено в версии 3.13.

#### `math.fmax(x, y)`

Возвращает большее из двух значений с плавающей запятой, рассматривая NaN как пропущенные данные.

Когда оба операнда – (знаковые) NaN или нули, возвращаются `nan` и `0` соответственно, а знак результата определяется реализацией; иначе говоря, `fmax()` не обязан учитывать знак таких операндов (см. приложение F стандарта C11, §F.10.0.3 и §F.10.9.2).

Добавлено в версии 3.15.

#### `math.fmin(x, y)`

Возвращает меньшее из двух значений с плавающей запятой, рассматривая NaN как пропущенные данные.

Когда оба операнда – (знаковые) NaN или нули, возвращаются `nan` и `0` соответственно, а знак результата определяется реализацией; иначе говоря, `fmin()` не обязан учитывать знак таких операндов (см. приложение F стандарта C11, §F.10.0.3 и §F.10.9.3).

Добавлено в версии 3.15.

#### `math.fmod(x, y)`

Возвращает остаток от деления с плавающей запятой `x / y`, как определено библиотечной функцией C `fmod(x, y)`. Обратите внимание, что выражение Python `x % y` может возвращать другой результат. Цель стандарта C состоит в том, чтобы `fmod(x, y)` было математически (с бесконечной точностью) равно `x - n*y` для некоторого целого числа *n* такого, что результат имеет тот же знак, что и *x*, и величину меньше `abs(y)`. Функция Python `x % y` возвращает результат со знаком *y* и может быть не вычислима точно для аргументов типа float. Например, `fmod(-1e-100, 1e100)` равно `-1e-100`, но результат Python `-1e-100 % 1e100` равен `1e100-1e-100`, что не может быть представлено точно как float и округляется до неожиданного значения `1e100`. По этой причине функция `fmod()` обычно предпочтительнее при работе с числами с плавающей запятой, а функция Python `x % y` предпочтительнее при работе с целыми числами.

#### `math.modf(x)`

Возвращает дробную и целую части *x*. Оба результата имеют тот же знак, что и *x*, и являются числами с плавающей запятой.

Обратите внимание, что `modf()` имеет другую схему вызова и возврата значения по сравнению с аналогами на C: она принимает один аргумент и возвращает пару значений, а не возвращает второе значение через «выходной параметр» (в Python такого нет).

#### `math.remainder(x, y)`

Возвращает остаток от деления по стандарту IEEE 754 для *x* на *y*. Для конечных *x* и конечного ненулевого *y* это разность `x - n*y`, где `n` – ближайшее целое к точному значению частного `x / y`. Если `x / y` находится ровно посередине между двумя последовательными целыми, то для `n` используется ближайшее *чётное* целое. Таким образом, остаток `r = remainder(x, y)` всегда удовлетворяет условию `abs(r) <= 0.5 * abs(y)`.

Особые случаи следуют IEEE 754: в частности, `remainder(x, math.inf)` равно *x* для любого конечного *x*, а `remainder(x, 0)` и `remainder(math.inf, x)` возбуждают [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) для любого не-NaN *x*. Если результат операции остатка равен нулю, этот нуль будет иметь тот же знак, что и *x*.

На платформах, использующих двоичную арифметику с плавающей запятой IEEE 754, результат этой операции всегда представим точно: погрешность округления не вносится.

Добавлено в версии 3.7.

#### `math.trunc(x)`

Возвращает *x* с отброшенной дробной частью, оставляя только целую часть. Это округление в сторону нуля: `trunc()` эквивалентно [`floor()`](https://python-all.ru/3.16/library/math.html#math.floor) для положительных *x* и эквивалентно [`ceil()`](https://python-all.ru/3.16/library/math.html#math.ceil) для отрицательных *x*. Если *x* не является float, делегирует [`x.__trunc__`](https://python-all.ru/3.16/reference/datamodel.html#object.__trunc__), которая должна возвращать значение [`Integral`](https://python-all.ru/3.16/library/numbers.html#numbers.Integral).

Для функций [`ceil()`](https://python-all.ru/3.16/library/math.html#math.ceil), [`floor()`](https://python-all.ru/3.16/library/math.html#math.floor) и [`modf()`](https://python-all.ru/3.16/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Float в Python обычно имеют точность не более 53 бит (как и тип C double на данной платформе), и в этом случае любой float *x* с `abs(x) >= 2**52` не имеет дробных битов.

## Функции для работы с числами с плавающей запятой

#### `math.copysign(x, y)`

Возвращает float с модулем (абсолютным значением) *x*, но со знаком *y*. На платформах, поддерживающих знаковый нуль, `copysign(1.0, -0.0)` возвращает *-1.0*.

#### `math.frexp(x)`

Возвращает мантиссу и экспоненту *x* в виде пары `(m, e)`. Если *x* – конечное ненулевое число, то *m* является float с `0.5 <= abs(m) < 1.0`, а целое *e* таково, что `x == m * 2**e` точно. В противном случае возвращает `(x, 0)`. Это используется для «разбора» внутреннего представления float переносимым способом.

Обратите внимание, что `frexp()` имеет другую схему вызова и возврата значения по сравнению с аналогами на C: она принимает один аргумент и возвращает пару значений, а не возвращает второе значение через «выходной параметр» (в Python такого нет).

#### `math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)`

Возвращает `True`, если значения *a* и *b* близки друг к другу, и `False` иначе.

Близость двух значений определяется на основе заданных абсолютного и относительного допусков. Если ошибок не возникает, результатом будет: `abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`.

*rel\_tol* – это относительный допуск; это максимально допустимая разница между *a* и *b*, относительно большего абсолютного значения *a* или *b*. Например, чтобы установить допуск 5%, передайте `rel_tol=0.05`. По умолчанию допуск равен `1e-09`, что гарантирует совпадение двух значений с точностью примерно до 9 десятичных знаков. *rel\_tol* должен быть неотрицательным и меньше `1.0`.

*abs\_tol* – это абсолютный допуск; по умолчанию он равен `0.0` и должен быть неотрицательным. При сравнении `x` с `0.0`, `isclose(x, 0)` вычисляется как `abs(x) <= rel_tol * abs(x)`, что равно `False` для любого ненулевого `x` и *rel\_tol* меньшего, чем `1.0`. Поэтому добавьте соответствующий положительный аргумент *abs\_tol* в вызов.

Особые значения IEEE 754: `NaN`, `inf` и `-inf` обрабатываются согласно правилам IEEE. В частности, `NaN` не считается близким ни к какому другому значению, включая `NaN`. `inf` и `-inf` считаются близкими только сами к себе.

Добавлено в версии 3.5.

> **См. также**
>
> [**PEP 485**](https://python-all.ru/3.16/library/math.html) – Функция для проверки приблизительного равенства

#### `math.isfinite(x)`

Возвращает `True`, если *x* не является ни бесконечностью, ни NaN, и `False` в противном случае. (Заметьте, что `0.0` *считается* конечным.)

Добавлено в версии 3.2.

#### `math.isnormal(x)`

Возвращает `True`, если *x* – нормальное число, то есть ненулевое конечное число, не являющееся субнормальным (см. [`issubnormal()`](https://python-all.ru/3.16/library/math.html#math.issubnormal)). В противном случае возвращает `False`.

Добавлено в версии 3.15.

#### `math.issubnormal(x)`

Возвращает `True`, если *x* – субнормальное число, то есть ненулевое конечное число, чья абсолютная величина меньше [`sys.float_info.min`](https://python-all.ru/3.16/library/sys.html#sys.float_info.min). В противном случае возвращает `False`.

Добавлено в версии 3.15.

#### `math.isinf(x)`

Возвращает `True`, если *x* является положительной или отрицательной бесконечностью, и `False` в противном случае.

#### `math.isnan(x)`

Возвращает `True`, если *x* является NaN (не числом), и `False` в противном случае.

#### `math.ldexp(x, i)`

Возвращает `x * (2**i)`. По сути, это обратная функция по отношению к [`frexp()`](https://python-all.ru/3.16/library/math.html#math.frexp).

#### `math.nextafter(x, y, steps=1)`

Возвращает значение с плавающей запятой, отстоящее на *steps* шагов от *x* в направлении *y*.

Если *x* равно *y*, возвращает *y*, если только *steps* не равно нулю.

Примеры:

- `math.nextafter(x, math.inf)` идёт вверх: в сторону положительной бесконечности.
- `math.nextafter(x, -math.inf)` идёт вниз: в сторону минус бесконечности.
- `math.nextafter(x, 0.0)` идёт к нулю.
- `math.nextafter(x, math.copysign(math.inf, x))` идёт от нуля.

См. также [`math.ulp()`](https://python-all.ru/3.16/library/math.html#math.ulp).

Добавлено в версии 3.9.

Изменено в версии 3.12: Добавлен аргумент *steps*.

#### `math.signbit(x)`

Возвращает `True`, если знак числа *x* отрицателен, и `False` в противном случае.

Это полезно для определения знакового бита нулей, бесконечностей и NaN.

Добавлено в версии 3.15.

#### `math.ulp(x)`

Возвращает значение наименее значащего бита числа с плавающей запятой *x*:

- Если *x* – NaN (не число), возвращает *x*.
- Если *x* отрицательно, возвращает `ulp(-x)`.
- Если *x* – положительная бесконечность, возвращает *x*.
- Если *x* равен нулю, возвращает наименьший положительный *денормализованный* представимый float (меньше минимального положительного *нормализованного* float, [`sys.float_info.min`](https://python-all.ru/3.16/library/sys.html#sys.float_info)).
- Если *x* равен наибольшему положительному представимому float, возвращает значение наименее значащего бита *x*, такое, что первый float, меньший *x*, равен `x - ulp(x)`.
- В противном случае (*x* – положительное конечное число) возвращает значение наименее значащего бита *x*, такое, что первый float, больший *x*, равен `x + ulp(x)`.

ULP означает «единица в последнем разряде».

См. также [`math.nextafter()`](https://python-all.ru/3.16/library/math.html#math.nextafter) и [`sys.float_info.epsilon`](https://python-all.ru/3.16/library/sys.html#sys.float_info).

Добавлено в версии 3.9.

## Степенные, показательные и логарифмические функции

#### `math.cbrt(x)`

Возвращает кубический корень из *x*.

Добавлено в версии 3.12.

#### `math.exp(x)`

Возвращает *e*, возведённое в степень *x*, где *e* = 2.718281… – основание натуральных логарифмов. Обычно это точнее, чем `math.e ** x` или `pow(math.e, x)`.

#### `math.exp2(x)`

Возвращает *2*, возведённое в степень *x*.

Добавлено в версии 3.12.

#### `math.expm1(x)`

Возвращает *e*, возведённое в степень *x*, минус 1. Здесь *e* – основание натуральных логарифмов. Для малых чисел с плавающей запятой *x* вычитание в `exp(x) - 1` может привести к [значительной потере точности](https://python-all.ru/3.16/library/math.html); функция `expm1()` позволяет вычислить это значение с полной точностью:

```python
>>> from math import exp, expm1
>>> exp(1e-5) - 1  # даёт результат с точностью до 11 знаков
1.0000050000069649e-05
>>> expm1(1e-5)    # результат с полной точностью
1.0000050000166668e-05
```

Добавлено в версии 3.2.

#### `math.log(x[, base])`

С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).

С двумя аргументами возвращает логарифм *x* по заданному основанию *base*, вычисленный как `log(x)/log(base)`.

#### `math.log1p(x)`

Возвращает натуральный логарифм *1+x* (основание *e*). Результат вычисляется способом, точным для *x* вблизи нуля.

#### `math.log2(x)`

Возвращает двоичный логарифм *x*. Обычно это точнее, чем `log(x, 2)`.

Добавлено в версии 3.3.

> **См. также**
>
> [`int.bit_length()`](https://python-all.ru/3.16/library/stdtypes.html#int.bit_length) возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей.

#### `math.log10(x)`

Возвращает десятичный логарифм *x*. Обычно это точнее, чем `log(x, 10)`.

#### `math.pow(x, y)`

Возвращает *x*, возведённое в степень *y*. Особые случаи по возможности следуют стандарту IEEE 754. В частности, `pow(1.0, x)` и `pow(x, 0.0)` всегда возвращают `1.0`, даже когда *x* – нуль или NaN. Если *x* и *y* конечны, *x* отрицательно, а *y* не является целым, то `pow(x, y)` не определено и возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError).

В отличие от встроенного оператора `**`, `math.pow()` преобразует оба аргумента к типу [`float`](https://python-all.ru/3.16/library/functions.html#float). Используйте `**` или встроенную функцию `pow()` для точного вычисления целочисленных степеней.

Изменено в версии 3.11: Особые случаи `pow(0.0, -inf)` и `pow(-0.0, -inf)` были изменены так, чтобы возвращать `inf` вместо возбуждения [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), для согласованности с IEEE 754.

#### `math.sqrt(x)`

Возвращает квадратный корень из *x*.

## Функции суммирования и произведения

#### `math.dist(p, q)`

Возвращает евклидово расстояние между двумя точками *p* и *q*, каждая из которых задаётся как последовательность (или итерируемый объект) координат. Обе точки должны иметь одинаковую размерность.

Примерно эквивалентно:

```python
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q, strict=True)))
```

Добавлено в версии 3.8.

#### `math.fsum(iterable)`

Возвращает точную сумму значений с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм.

Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.

Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/3.16/library/math.html).

#### `math.hypot(*coordinates)`

Возвращает евклидову норму, `sqrt(sum(x**2 for x in coordinates))`. Это длина вектора от начала координат до точки, заданной координатами.

Для двумерной точки `(x, y)` это эквивалентно вычислению гипотенузы прямоугольного треугольника по теореме Пифагора, `sqrt(x*x + y*y)`.

Изменено в версии 3.8: Добавлена поддержка n-мерных точек. Ранее поддерживался только двумерный случай.

Изменено в версии 3.10: Улучшена точность алгоритма так, что максимальная ошибка составляет менее 1 ulp (единицы в последнем разряде). Как правило, результат почти всегда правильно округлён с точностью до 1/2 ulp.

#### `math.prod(iterable, *, start=1)`

Вычисляет произведение всех элементов входного *итерируемого объекта*. Значение *start* по умолчанию для произведения равно `1`.

Если итерируемый объект пуст, возвращает начальное значение. Эта функция предназначена специально для работы с числовыми значениями и может отвергать нечисловые типы.

Добавлено в версии 3.8.

#### `math.sumprod(p, q)`

Возвращает сумму произведений значений из двух итерируемых объектов *p* и *q*.

Возбуждает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если входные данные имеют разную длину.

Примерно эквивалентно:

```python
sum(map(operator.mul, p, q, strict=True))
```

Для входных данных типа float и смешанных int/float промежуточные произведения и суммы вычисляются с расширенной точностью.

Добавлено в версии 3.12.

## Преобразование углов

#### `math.degrees(x)`

Преобразует угол *x* из радианов в градусы.

#### `math.radians(x)`

Преобразует угол *x* из градусов в радианы.

## Тригонометрические функции

#### `math.acos(x)`

Возвращает арккосинус *x* в радианах. Результат находится в диапазоне от `0` до `pi`.

#### `math.acospi(x)`

Возвращает арккосинус *x* в полуоборотах. Результат находится между `0` и `1`.

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.asin(x)`

Возвращает арксинус *x* в радианах. Результат находится в диапазоне от `-pi/2` до `pi/2`.

#### `math.asinpi(x)`

Возвращает арксинус *x* в полуоборотах. Результат находится между `-0.5` и `0.5`.

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.atan(x)`

Возвращает арктангенс *x* в радианах. Результат находится в диапазоне от `-pi/2` до `pi/2`.

#### `math.atanpi(x)`

Возвращает арктангенс *x* в полуоборотах. Результат находится между `-0.5` и `0.5`.

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.atan2(y, x)`

Возвращает `atan(y / x)` в радианах. Результат находится в диапазоне от `-pi` до `pi`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Особенность `atan2()` в том, что ему известны знаки обоих аргументов, поэтому он может вычислить правильный квадрант для угла. Например, `atan(1)` и `atan2(1, 1)` равны `pi/4`, но `atan2(-1, -1)` равен `-3*pi/4`.

#### `math.atan2pi(y, x)`

Возвращает `atanpi(y / x)` в полуоборотах. Результат находится между `-1` и `1`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Смысл `atan2pi()` в том, что ему известны знаки обоих входных аргументов, поэтому он может вычислить правильный квадрант для угла. Например, `atanpi(1)` и `atan2pi(1, 1)` оба равны `0.25`, но `atan2pi(-1, -1)` равно `-0.75`.

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.cos(x)`

Возвращает косинус *x* радиан.

#### `math.cospi(x)`

Возвращает косинус *x* полуоборотов (*x⋅π* радиан).

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.sin(x)`

Возвращает синус *x* радиан.

#### `math.sinpi(x)`

Возвращает синус *x* полуоборотов (*x⋅π* радиан).

Добавлено в версии 3.16.0a0 (не выпущено).

#### `math.tan(x)`

Возвращает тангенс *x* радиан.

#### `math.tanpi(x)`

Возвращает тангенс *x* полуоборотов (*x⋅π* радиан).

Добавлено в версии 3.16.0a0 (не выпущено).

## Гиперболические функции

[Гиперболические функции](https://python-all.ru/3.16/library/math.html) – это аналоги тригонометрических функций, основанные на гиперболах, а не на окружностях.

#### `math.acosh(x)`

Возвращает обратный гиперболический косинус *x*.

#### `math.asinh(x)`

Возвращает обратный гиперболический синус *x*.

#### `math.atanh(x)`

Возвращает обратный гиперболический тангенс *x*.

#### `math.cosh(x)`

Возвращает гиперболический косинус *x*.

#### `math.sinh(x)`

Возвращает гиперболический синус *x*.

#### `math.tanh(x)`

Возвращает гиперболический тангенс *x*.

## Специальные функции

#### `math.erf(x)`

Возвращает значение [функции ошибок](https://python-all.ru/3.16/library/math.html) в точке *x*.

Функция `erf()` может использоваться для вычисления традиционных статистических функций, таких как [кумулятивное стандартное нормальное распределение](https://python-all.ru/3.16/library/math.html):

```python
def phi(x):
    'Cumulative distribution function for the standard normal distribution'
    return (1.0 + erf(x / sqrt(2.0))) / 2.0
```

Добавлено в версии 3.2.

#### `math.erfc(x)`

Возвращает дополнительную функцию ошибок в точке *x*. [Дополнительная функция ошибок](https://python-all.ru/3.16/library/math.html) определяется как `1.0 - erf(x)`. Она используется для больших значений *x*, где вычитание из единицы может привести к [потере значимости](https://python-all.ru/3.16/library/math.html).

Добавлено в версии 3.2.

#### `math.gamma(x)`

Возвращает значение [гамма-функции](https://python-all.ru/3.16/library/math.html) в точке *x*.

Добавлено в версии 3.2.

#### `math.lgamma(x)`

Возвращает натуральный логарифм абсолютного значения гамма-функции в точке *x*.

Добавлено в версии 3.2.

## Теоретико-числовые функции

Для обратной совместимости модуль `math` также предоставляет псевдонимы следующих функций из модуля [`math.integer`](https://python-all.ru/3.16/library/math.integer.html#module-math.integer):

| [`comb(n, k)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.comb) | Количество способов выбрать *k* элементов из *n* элементов без повторений и без учёта порядка |
| --- | --- |
| [`factorial(n)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.factorial) | Факториал *n* |
| [`gcd(*integers)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.gcd) | Наибольший общий делитель целочисленных аргументов |
| [`isqrt(n)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.isqrt) | Целочисленный квадратный корень из неотрицательного целого *n* |
| [`lcm(*integers)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.lcm) | Наименьшее общее кратное целочисленных аргументов |
| [`perm(n, k)`](https://python-all.ru/3.16/library/math.integer.html#math.integer.perm) | Количество способов выбрать *k* элементов из *n* элементов без повторений и с учётом порядка |

Добавлено в версии 3.5: Функция [`gcd()`](https://python-all.ru/3.16/library/math.html#math.gcd).

Добавлено в версии 3.8: Функции [`comb()`](https://python-all.ru/3.16/library/math.html#math.comb), [`perm()`](https://python-all.ru/3.16/library/math.html#math.perm) и [`isqrt()`](https://python-all.ru/3.16/library/math.html#math.isqrt).

Добавлено в версии 3.9: Функция [`lcm()`](https://python-all.ru/3.16/library/math.html#math.lcm).

Изменено в версии 3.9: Добавлена поддержка произвольного количества аргументов в функции [`gcd()`](https://python-all.ru/3.16/library/math.html#math.gcd) . Ранее поддерживались только два аргумента.

Изменено в версии 3.10: Числа с плавающей запятой с целыми значениями (например, `5.0`) больше не принимаются в функции [`factorial()`](https://python-all.ru/3.16/library/math.html#math.factorial).

[Мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) с версии 3.15: Используйте функции [`math.integer`](https://python-all.ru/3.16/library/math.integer.html#module-math.integer) вместо этих псевдонимов.

## Константы

#### `math.pi`

Математическая константа *π* = 3,141592… с доступной точностью.

#### `math.e`

Математическая константа *e* = 2,718281… с доступной точностью.

#### `math.tau`

Математическая константа *τ* = 6,283185… с доступной точностью. Тау – это константа окружности, равная 2*π*, отношению длины окружности к её радиусу. Чтобы узнать больше о Тау, посмотрите видео Ви Харт [Pi is (still) Wrong](https://python-all.ru/3.16/library/math.html) и начните праздновать [День Тау](https://python-all.ru/3.16/library/math.html), съев вдвое больше пирога!

Добавлено в версии 3.6.

#### `math.inf`

Положительная бесконечность с плавающей запятой. (Для отрицательной бесконечности используйте `-math.inf`.) Эквивалентно результату `float('inf')`.

Добавлено в версии 3.5.

#### `math.nan`

Значение с плавающей запятой «не число» (NaN). Эквивалентно результату `float('nan')`. В соответствии с требованиями стандарта [IEEE-754](https://python-all.ru/3.16/library/math.html), `math.nan` и `float('nan')` не считаются равными никакому другому числовому значению, включая самих себя. Чтобы проверить, является ли число NaN, используйте функцию [`isnan()`](https://python-all.ru/3.16/library/math.html#math.isnan) для проверки на NaN вместо `is` или `==`. Пример:

```python
>>> import math
>>> math.nan == math.nan
False
>>> float('nan') == float('nan')
False
>>> math.isnan(math.nan)
True
>>> math.isnan(float('nan'))
True
```

Добавлено в версии 3.5.

Изменено в версии 3.11: Теперь всегда доступно.

**Особенность реализации CPython:** Модуль `math` в основном состоит из тонких обёрток вокруг функций математической библиотеки C платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация вызывает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) для недопустимых операций, таких как `sqrt(-1.0)` или `log(0.0)` (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и [`OverflowError`](https://python-all.ru/3.16/library/exceptions.html#OverflowError) для результатов, вызывающих переполнение (например, `exp(1000.0)`). NaN не будет возвращён ни одной из указанных выше функций, если только один или несколько входных аргументов не были NaN; в этом случае большинство функций вернут NaN, но (опять же следуя приложению F C99) есть некоторые исключения из этого правила, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.

Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.

> **См. также**
>
> **Модуль [`cmath`](https://python-all.ru/3.16/library/cmath.html#module-cmath)**
>
> Версии многих из этих функций для комплексных чисел.
>
> **Модуль [`math.integer`](https://python-all.ru/3.16/library/math.integer.html#module-math.integer)**
>
> Математические функции для целых чисел.
