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

---

# `cmath` – математические функции для комплексных чисел

---

Этот модуль предоставляет доступ к математическим функциям для комплексных чисел. Функции в этом модуле принимают в качестве аргументов целые числа, числа с плавающей запятой или комплексные числа. Они также принимают любой объект Python, у которого есть метод [`__complex__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__complex__) или [`__float__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__float__): эти методы используются для преобразования объекта в комплексное число или число с плавающей запятой соответственно, после чего функция применяется к результату преобразования.

> **Примечание**
>
> Для функций, использующих разрезы ветвей, возникает проблема определения этих функций на самом разрезе. Следуя работе Кахана «Branch cuts for complex elementary functions», а также Приложению G стандарта C99 и последующих стандартов C, мы используем знак нуля, чтобы различать стороны разреза ветви: для разреза вдоль (части) действительной оси мы смотрим на знак мнимой части, а для разреза вдоль мнимой оси – на знак действительной части.
>
> Например, функция [`cmath.sqrt()`](https://python-all.ru/3.12/library/cmath.html#cmath.sqrt) имеет разрез ветви вдоль отрицательной действительной оси. Аргумент `complex(-2.0, -0.0)` рассматривается так, как если бы он находился *ниже* разреза, и поэтому даёт результат на отрицательной мнимой оси:
>
> ```python
> >>> cmath.sqrt(complex(-2.0, -0.0))
> -1.4142135623730951j
> ```
>
> Но аргумент `complex(-2.0, 0.0)` рассматривается как лежащий выше разреза ветви:
>
> ```python
> >>> cmath.sqrt(complex(-2.0, 0.0))
> 1.4142135623730951j
> ```

| **Преобразование в полярные координаты и обратно** |  |
| --- | --- |
| [`phase(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.phase) | Возвращает фазу *z* |
| [`polar(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.polar) | Возвращает представление *z* в полярных координатах |
| [`rect(r, phi)`](https://python-all.ru/3.12/library/cmath.html#cmath.rect) | Возвращает комплексное число *z* с полярными координатами *r* и *phi* |
| **Степенные и логарифмические функции** |  |
| [`exp(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.exp) | Возвращает *e* в степени *z* |
| [`log(z[, base])`](https://python-all.ru/3.12/library/cmath.html#cmath.log) | Возвращает логарифм *z* по заданному *основанию* (по умолчанию *e*) |
| [`log10(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.log10) | Возвращает десятичный логарифм *z* |
| [`sqrt(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.sqrt) | Возвращает квадратный корень из *z* |
| **Тригонометрические функции** |  |
| [`acos(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.acos) | Возвращает арккосинус *z* |
| [`asin(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.asin) | Возвращает арксинус *z* |
| [`atan(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.atan) | Возвращает арктангенс *z* |
| [`cos(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.cos) | Возвращает косинус *z* |
| [`sin(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.sin) | Возвращает синус *z* |
| [`tan(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.tan) | Возвращает тангенс *z* |
| **Гиперболические функции** |  |
| [`acosh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.acosh) | Возвращает обратный гиперболический косинус *z* |
| [`asinh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.asinh) | Возвращает обратный гиперболический синус *z* |
| [`atanh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.atanh) | Возвращает обратный гиперболический тангенс *z* |
| [`cosh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.cosh) | Возвращает гиперболический косинус *z* |
| [`sinh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.sinh) | Возвращает гиперболический синус *z* |
| [`tanh(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.tanh) | Возвращает гиперболический тангенс *z* |
| **Функции классификации** |  |
| [`isfinite(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.isfinite) | Проверяет, все ли компоненты *z* конечны |
| [`isinf(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.isinf) | Проверяет, является ли какой-либо компонент *z* бесконечным |
| [`isnan(z)`](https://python-all.ru/3.12/library/cmath.html#cmath.isnan) | Проверяет, является ли какой-либо компонент *z* NaN |
| [`isclose(a, b, *, rel_tol, abs_tol)`](https://python-all.ru/3.12/library/cmath.html#cmath.isclose) | Проверяет, близки ли значения *a* и *b* друг к другу |
| **Константы** |  |
| [`pi`](https://python-all.ru/3.12/library/cmath.html#cmath.pi) | *π* = 3.141592… |
| [`e`](https://python-all.ru/3.12/library/cmath.html#cmath.e) | *e* = 2.718281… |
| [`tau`](https://python-all.ru/3.12/library/cmath.html#cmath.tau) | *τ* = 2*π* = 6.283185… |
| [`inf`](https://python-all.ru/3.12/library/cmath.html#cmath.inf) | Положительная бесконечность |
| [`infj`](https://python-all.ru/3.12/library/cmath.html#cmath.infj) | Чисто мнимая бесконечность |
| [`nan`](https://python-all.ru/3.12/library/cmath.html#cmath.nan) | «Не число» (NaN) |
| [`nanj`](https://python-all.ru/3.12/library/cmath.html#cmath.nanj) | Чисто мнимый NaN |

## Преобразования в полярные координаты и обратно

Комплексное число Python `z` хранится внутри в *прямоугольных* (*декартовых*) координатах. Оно полностью определяется своей *действительной частью* `z.real` и *мнимой частью* `z.imag`.

*Полярные координаты* дают альтернативный способ представления комплексного числа. В полярных координатах комплексное число *z* определяется модулем *r* и фазовым углом *phi*. Модуль *r* – это расстояние от *z* до начала координат, а фаза *phi* – это угол, измеряемый в радианах против часовой стрелки от положительной оси x до отрезка, соединяющего начало координат с *z*.

Следующие функции можно использовать для преобразования из исходных прямоугольных координат в полярные и обратно.

#### `cmath.phase(z)`

Возвращает фазу *z* (также известную как *аргумент* числа *z*) в виде числа с плавающей запятой. `phase(z)` эквивалентно `math.atan2(z.imag, z.real)`. Результат лежит в диапазоне \[-*π*, *π*\], а разрез ветви для этой операции проходит по отрицательной действительной оси. Знак результата совпадает со знаком `z.imag`, даже если `z.imag` равно нулю:

```python
>>> phase(complex(-1.0, 0.0))
3.141592653589793
>>> phase(complex(-1.0, -0.0))
-3.141592653589793
```

> **Примечание**
>
> Модуль (абсолютное значение) комплексного числа *z* можно вычислить с помощью встроенной функции [`abs()`](https://python-all.ru/3.12/library/functions.html#abs). Для этой операции нет отдельной функции модуля [`cmath`](https://python-all.ru/3.12/library/cmath.html#module-cmath).

#### `cmath.polar(z)`

Возвращает представление *z* в полярных координатах. Возвращает пару `(r, phi)`, где *r* – модуль *z*, а *phi* – фаза *z*. `polar(z)` эквивалентно `(abs(z), phase(z))`.

#### `cmath.rect(r, phi)`

Возвращает комплексное число *z* с полярными координатами *r* и *phi*. Эквивалентно `complex(r * math.cos(phi), r * math.sin(phi))`.

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

#### `cmath.exp(z)`

Возвращает *e*, возведённое в степень *z*, где *e* – основание натуральных логарифмов.

#### `cmath.log(z[, base])`

Возвращает логарифм *z* по заданному *основанию*. Если *основание* не указано, возвращает натуральный логарифм *z*. Имеется один разрез ветви: от 0 по отрицательной действительной оси до -∞.

#### `cmath.log10(z)`

Возвращает десятичный логарифм *z*. Имеет тот же разрез ветви, что и [`log()`](https://python-all.ru/3.12/library/cmath.html#cmath.log).

#### `cmath.sqrt(z)`

Возвращает квадратный корень из *z*. Имеет тот же разрез ветви, что и [`log()`](https://python-all.ru/3.12/library/cmath.html#cmath.log).

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

#### `cmath.acos(z)`

Возвращает арккосинус *z*. Имеется два разреза ветви: один идёт вправо от 1 вдоль действительной оси до ∞. Другой идёт влево от -1 вдоль действительной оси до -∞.

#### `cmath.asin(z)`

Возвращает арксинус *z*. Имеет те же разрезы ветвей, что и [`acos()`](https://python-all.ru/3.12/library/cmath.html#cmath.acos).

#### `cmath.atan(z)`

Возвращает арктангенс *z*. Имеется два разреза ветви: один идёт от `1j` вдоль мнимой оси до `∞j`. Другой идёт от `-1j` вдоль мнимой оси до `-∞j`.

#### `cmath.cos(z)`

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

#### `cmath.sin(z)`

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

#### `cmath.tan(z)`

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

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

#### `cmath.acosh(z)`

Возвращает обратный гиперболический косинус числа *z*. Имеется один разрез ветви, проходящий от 1 влево по вещественной оси до −∞.

#### `cmath.asinh(z)`

Возвращает обратный гиперболический синус числа *z*. Имеется два разреза ветви: Один проходит от `1j` по мнимой оси до `∞j`. Другой проходит от `-1j` по мнимой оси до `-∞j`.

#### `cmath.atanh(z)`

Возвращает обратный гиперболический тангенс числа *z*. Имеется два разреза ветви: один проходит от `1` по вещественной оси до `∞`. Другой проходит от `-1` по вещественной оси до `-∞`.

#### `cmath.cosh(z)`

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

#### `cmath.sinh(z)`

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

#### `cmath.tanh(z)`

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

## Функции классификации

#### `cmath.isfinite(z)`

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

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

#### `cmath.isinf(z)`

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

#### `cmath.isnan(z)`

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

#### `cmath.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.12/library/cmath.html) – Функция для проверки приблизительного равенства

## Константы

#### `cmath.pi`

Математическая константа *π*, в виде числа с плавающей запятой.

#### `cmath.e`

Математическая константа *e*, в виде числа с плавающей запятой.

#### `cmath.tau`

Математическая константа *τ*, в виде числа с плавающей запятой.

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

#### `cmath.inf`

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

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

#### `cmath.infj`

Комплексное число с нулевой действительной частью и положительной бесконечной мнимой частью. Эквивалентно `complex(0.0, float('inf'))`.

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

#### `cmath.nan`

Значение с плавающей запятой «не число» (NaN). Эквивалентно `float('nan')`.

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

#### `cmath.nanj`

Комплексное число с нулевой действительной частью и NaN в мнимой части. Эквивалентно `complex(0.0, float('nan'))`.

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

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

Примечание о разрезах ветвей: это кривые, вдоль которых данная функция перестаёт быть непрерывной. Они являются необходимым свойством многих комплексных функций. Предполагается, что если вам нужно вычислять комплексные функции, вы разбираетесь в разрезах ветвей. Для понимания обратитесь к любой (не слишком элементарной) книге по комплексному анализу. Для получения информации о правильном выборе разрезов ветвей для численных расчётов хорошим справочником может служить следующее издание:

> **См. также**
>
> Kahan, W: Ветви разрезов для комплексных элементарных функций; или Много шума из-за знакового бита. В Iserles, A., и Powell, M. (ред.), Современное состояние численного анализа. Clarendon Press (1987) стр. 165–211.
