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

---

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

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

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

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

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

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

Возвращает потолок

*x*

, наименьшее целое число, большее или равное

*x*

. Если

*x*

– не число с плавающей запятой, передает управление

`x.__ceil__()`

, которая должна вернуть целочисленное значение

`Integral`

.

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

Возвращает

*x*

со знаком

*y*

.

`copysign`

копирует знаковый бит числа с плавающей запятой IEEE 754;

`copysign(1, -0.0)`

возвращает

*-1.0*

.

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

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

*x*

.

#### `[math.factorial]math.factorial(x)`

Возвращает факториал

*x*

. Вызывает

[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)

, если

*x*

не является целым числом или отрицательно.

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

Возвращает пол

*x*

, наибольшее целое число, меньшее или равное

*x*

. Если

*x*

– не число с плавающей запятой, передает управление

`x.__floor__()`

, которая должна вернуть целочисленное значение

`Integral`

.

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

Возвращает

`fmod(x, y)`

, как определено в библиотеке C платформы. Обратите внимание, что выражение Python

`x % y`

может возвращать не тот же результат. По стандарту C

`fmod(x, y)`

должен быть точно (математически, с бесконечной точностью) равен

`x - n*y`

для некоторого целого

*n*

, такого что результат имеет тот же знак, что и

*x*

, и модуль меньше

`abs(y)`

. Выражение Python

`x % y`

возвращает результат со знаком

*y*

и может быть невычислимо точно для аргументов с плавающей запятой. Например,

`fmod(-1e-100, 1e100)`

равно

`-1e-100`

, но результат Python

`-1e-100 % 1e100`

равен

`1e100-1e-100`

, который не может быть представлен точно как float и округляется до неожиданного

`1e100`

. По этой причине функция

[`fmod()`](https://python-all.ru/3.0/library/math.html#math.fmod)

обычно предпочтительнее при работе с числами с плавающей запятой, а выражение Python

`x % y`

– при работе с целыми числами.

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

Возвращает мантиссу и экспоненту

*x*

в виде пары

`(m, e)`

.

*m*

– число с плавающей запятой,

*e*

– целое число, такие что

`x == m * 2**e`

точно. Если

*x*

равно нулю, возвращает

`(0.0, 0)`

, иначе

`0.5 <= abs(m) < 1`

. Используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.

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

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

> **Примечание**
>
> Точность fsum() может ухудшаться в сборках, которые используют сложение с расширенной точностью и затем дважды округляют результаты.

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

Проверяет, является ли число с плавающей запятой

*x*

положительной или отрицательной бесконечностью.

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

Проверяет, является ли число с плавающей запятой

*x*

NaN (не числом). NaN являются частью стандартов IEEE 754. Такие операции, как (но не ограничиваясь)

`inf * 0`

,

`inf / inf`

или любая операция с NaN, например

`nan * 1`

, возвращают NaN.

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

Возвращает

`x * (2**i)`

. Это, по сути, обратная функция к

[`frexp()`](https://python-all.ru/3.0/library/math.html#math.frexp)

.

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

Возвращает дробную и целую части

*x*

. Оба результата имеют тот же знак, что и

*x*

, и являются числами с плавающей запятой.

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

Возвращает значение

`Real`

*x*

, усечённое до типа

`Integral`

(обычно целого числа). Передает управление

`x.__trunc__()`

.

Обратите внимание, что [`frexp()`](https://python-all.ru/3.0/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/3.0/library/math.html#math.modf) имеют другой шаблон вызова/возврата, чем их эквиваленты в C: они принимают один аргумент и возвращают пару значений, а не возвращают второе значение через «выходной параметр» (такого в Python нет).

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

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

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

Возвращает

`e**x`

.

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

Возвращает логарифм

*x*

по заданному основанию

*base*

. Если основание

*base*

не указано, возвращает натуральный логарифм

*x*

(то есть логарифм по основанию

*e*

).

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

Возвращает натуральный логарифм

*1+x*

(основание

*e*

). Результат вычисляется способом, точным для

*x*

вблизи нуля.

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

Возвращает десятичный логарифм (по основанию 10) числа

*x*

.

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

Возвращает

`x`

, возведённое в степень

`y`

. Особые случаи по возможности следуют Приложению ‘F’ стандарта C99. В частности,

`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.0/library/exceptions.html#exceptions.ValueError)

.

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

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

*x*

.

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

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

Возвращает арккосинус

*x*

в радианах.

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

Возвращает арксинус

*x*

в радианах.

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

Возвращает арктангенс

*x*

в радианах.

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

Возвращает

`atan(y / x)`

в радианах. Результат находится между

`-π`

и

`π`

. Вектор на плоскости от начала координат до точки

`(x, y)`

образует этот угол с положительной осью X. Смысл

[`atan2()`](https://python-all.ru/3.0/library/math.html#math.atan2)

заключается в том, что ей известны знаки обоих аргументов, поэтому она может вычислить правильный квадрант для угла. Например,

`atan(1`

) и

`atan2(1, 1)`

оба равны

`π/4`

, но

`atan2(-1, -1)`

равен

`-3*π/4`

.

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

Возвращает косинус

*x*

радиан.

#### `[math.hypot]math.hypot(x, y)`

Возвращает евклидову норму,

`sqrt(x*x + y*y)`

. Это длина вектора от начала координат до точки

`(x, y)`

.

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

Возвращает синус

*x*

радиан.

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

Возвращает тангенс

*x*

радиан.

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

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

Преобразует угол

*x*

из радианов в градусы.

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

Преобразует угол

*x*

из градусов в радианы.

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

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

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

*x*

.

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

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

*x*

.

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

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

*x*

.

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

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

*x*

.

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

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

*x*

.

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

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

*x*

.

# Константы

#### `[math.pi]math.pi`

Математическая константа

*π*

.

#### `[math.e]math.e`

Математическая константа

*e*

.

> **Примечание**
>
> Модуль `math` в основном состоит из тонких обёрток вокруг функций математической библиотеки языка C на данной платформе. Поведение в исключительных случаях слабо определено стандартами C, и Python заимствует большую часть поведения при сообщении об ошибках математических функций от реализации библиотеки C на конкретной платформе. В результате конкретные исключения, возбуждаемые в ошибочных случаях (и даже то, считаются ли некоторые аргументы исключительными вообще), не определены таким образом, чтобы быть переносимыми между платформами и версиями. Например, возвращает ли `math.log(0)` `-Inf` или возбуждает [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError) или [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError) не определено, и в случаях, когда `math.log(0)` возбуждает [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError), `math.log(0L)` может возбуждать [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError) вместо этого.
>
> Все функции возвращают тихое *NaN*, если хотя бы один из аргументов равен *NaN*. Сигнальные *NaN* возбуждают исключение. Тип исключения по-прежнему зависит от платформы и реализации libm. Обычно это [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError) для *EDOM* и [`OverflowError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.OverflowError) для errno *ERANGE*.

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