math.md
1> **Источник:** https://python-all.ru/3.12/library/math.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `math` – Математические функции89---1011Этот модуль предоставляет доступ к математическим функциям, определённым стандартом C.1213Эти функции нельзя использовать с комплексными числами; если нужна поддержка комплексных чисел, используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/3.12/library/cmath.html#module-cmath). Различие между функциями, поддерживающими комплексные числа, и теми, которые их не поддерживают, проведено потому, что большинству пользователей не нужно углубляться в математику, необходимую для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить непредвиденное комплексное число, переданное в качестве параметра, так что программист может выяснить, как и почему оно возникло.1415Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.1617## Теоретико-числовые функции и функции представления1819#### `math.ceil(x)`2021Возвращает потолок *x* – наименьшее целое число, большее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение [`x.__ceil__`](https://python-all.ru/3.12/reference/datamodel.html#object.__ceil__), которая должна вернуть значение типа [`Integral`](https://python-all.ru/3.12/library/numbers.html#numbers.Integral).2223#### `math.comb(n, k)`2425Возвращает количество способов выбрать *k* элементов из *n* элементов без повторений и без учёта порядка.2627Вычисляется в `n! / (k! * (n - k)!)`, когда `k <= n`, и в ноль, когда `k > n`.2829Также называется биномиальным коэффициентом, поскольку он равен коэффициенту при k-м члене в разложении многочлена `(1 + x)ⁿ`.3031Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если хотя бы один из аргументов не является целым числом. Возбуждает [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError), если хотя бы один из аргументов отрицателен.3233Добавлено в версии 3.8.3435#### `math.copysign(x, y)`3637Возвращает float с модулем (абсолютным значением) *x*, но со знаком *y*. На платформах, поддерживающих знаковый нуль, `copysign(1.0, -0.0)` возвращает *-1.0*.3839#### `math.fabs(x)`4041Возвращает абсолютное значение *x*.4243#### `math.factorial(n)`4445Возвращает факториал *n* как целое число. Вызывает [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError), если *n* не является целым или является отрицательным.4647Устарело с версии 3.9: Принимать числа с плавающей запятой с целыми значениями (например, `5.0`) устарело.4849#### `math.floor(x)`5051Возвращает пол *x* – наибольшее целое число, меньшее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение [`x.__floor__`](https://python-all.ru/3.12/reference/datamodel.html#object.__floor__), которая должна вернуть значение типа [`Integral`](https://python-all.ru/3.12/library/numbers.html#numbers.Integral).5253#### `math.fmod(x, y)`5455Возвращает остаток от деления с плавающей запятой `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()`](https://python-all.ru/3.12/library/math.html#math.fmod) обычно предпочтительнее при работе с числами с плавающей запятой, а функция Python `x % y` предпочтительнее при работе с целыми числами.5657#### `math.frexp(x)`5859Возвращает мантиссу и экспоненту числа *x* в виде пары `(m, e)`. *m* – число с плавающей запятой, а *e* – целое число, такие что `x == m * 2**e` точно. Если *x* равно нулю, возвращает `(0.0, 0)`, иначе `0.5 <= abs(m) < 1`. Это используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.6061#### `math.fsum(iterable)`6263Возвращает точную сумму значений с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм.6465Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.6667Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/3.12/library/math.html).6869#### `math.gcd(*integers)`7071Возвращает наибольший общий делитель указанных целых аргументов. Если хотя бы один аргумент не равен нулю, возвращается наибольшее положительное целое число, являющееся делителем всех аргументов. Если все аргументы равны нулю, возвращается `0`. Вызов `gcd()` без аргументов возвращает `0`.7273Добавлено в версии 3.5.7475Изменено в версии 3.9: Добавлена поддержка произвольного количества аргументов. Ранее поддерживалось только два аргумента.7677#### `math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)`7879Возвращает `True`, если значения *a* и *b* близки друг к другу, и `False` иначе.8081Близость двух значений определяется на основе заданных абсолютного и относительного допусков. Если ошибок не возникает, результатом будет: `abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`.8283*rel\_tol* – это относительный допуск; это максимально допустимая разница между *a* и *b*, относительно большего абсолютного значения *a* или *b*. Например, чтобы установить допуск 5%, передайте `rel_tol=0.05`. По умолчанию допуск равен `1e-09`, что гарантирует совпадение двух значений с точностью примерно до 9 десятичных знаков. *rel\_tol* должен быть неотрицательным и меньше `1.0`.8485*abs\_tol* – это абсолютный допуск; по умолчанию он равен `0.0` и должен быть неотрицательным. При сравнении `x` с `0.0`, `isclose(x, 0)` вычисляется как `abs(x) <= rel_tol * abs(x)`, что равно `False` для любого ненулевого `x` и *rel\_tol* меньшего, чем `1.0`. Поэтому добавьте соответствующий положительный аргумент *abs\_tol* в вызов.8687Особые значения IEEE 754: `NaN`, `inf` и `-inf` обрабатываются согласно правилам IEEE. В частности, `NaN` не считается близким ни к какому другому значению, включая `NaN`. `inf` и `-inf` считаются близкими только сами к себе.8889Добавлено в версии 3.5.9091> **См. также**92>93> [**PEP 485**](https://python-all.ru/3.12/library/math.html) – Функция для проверки приблизительного равенства9495#### `math.isfinite(x)`9697Возвращает `True`, если *x* не является ни бесконечностью, ни NaN, и `False` в противном случае. (Заметьте, что `0.0` *считается* конечным.)9899Добавлено в версии 3.2.100101#### `math.isinf(x)`102103Возвращает `True`, если *x* является положительной или отрицательной бесконечностью, и `False` в противном случае.104105#### `math.isnan(x)`106107Возвращает `True`, если *x* является NaN (не числом), и `False` в противном случае.108109#### `math.isqrt(n)`110111Возвращает целую часть квадратного корня неотрицательного целого числа *n*. Это округление вниз точного квадратного корня из *n*, или, что то же самое, наибольшее целое число *a* такое, что *a*² ≤ *n*.112113Для некоторых приложений может быть удобнее наименьшее целое число *a* такое, что *n* ≤ *a*², иными словами, округление вверх точного квадратного корня из *n*. Для положительного *n* это можно вычислить с помощью `a = 1 + isqrt(n - 1)`.114115Добавлено в версии 3.8.116117#### `math.lcm(*integers)`118119Возвращает наименьшее общее кратное указанных целых аргументов. Если все аргументы не равны нулю, возвращается наименьшее положительное целое число, кратное всем аргументам. Если хотя бы один аргумент равен нулю, возвращается `0`. Вызов `lcm()` без аргументов возвращает `1`.120121Добавлено в версии 3.9.122123#### `math.ldexp(x, i)`124125Возвращает `x * (2**i)`. По сути, это обратная функция по отношению к [`frexp()`](https://python-all.ru/3.12/library/math.html#math.frexp).126127#### `math.modf(x)`128129Возвращает дробную и целую части *x*. Оба результата имеют тот же знак, что и *x*, и являются числами с плавающей запятой.130131#### `math.nextafter(x, y, steps=1)`132133Возвращает значение с плавающей запятой, отстоящее на *steps* шагов от *x* в направлении *y*.134135Если *x* равно *y*, возвращает *y*, если только *steps* не равно нулю.136137Примеры:138139- `math.nextafter(x, math.inf)` идёт вверх: в сторону положительной бесконечности.140- `math.nextafter(x, -math.inf)` идёт вниз: в сторону минус бесконечности.141- `math.nextafter(x, 0.0)` идёт к нулю.142- `math.nextafter(x, math.copysign(math.inf, x))` идёт от нуля.143144См. также [`math.ulp()`](https://python-all.ru/3.12/library/math.html#math.ulp).145146Добавлено в версии 3.9.147148Изменено в версии 3.12: Добавлен аргумент *steps*.149150#### `math.perm(n, k=None)`151152Возвращает количество способов выбрать *k* элементов из *n* без повторений и с учётом порядка.153154Вычисляется в `n! / (n - k)!`, когда `k <= n`, и в ноль, когда `k > n`.155156Если *k* не указан или равен `None`, то *k* по умолчанию принимается равным *n*, и функция возвращает `n!`.157158Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если хотя бы один из аргументов не является целым числом. Возбуждает [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError), если хотя бы один из аргументов отрицателен.159160Добавлено в версии 3.8.161162#### `math.prod(iterable, *, start=1)`163164Вычисляет произведение всех элементов входного *итерируемого объекта*. Значение *start* по умолчанию для произведения равно `1`.165166Если итерируемый объект пуст, возвращает начальное значение. Эта функция предназначена специально для работы с числовыми значениями и может отвергать нечисловые типы.167168Добавлено в версии 3.8.169170#### `math.remainder(x, y)`171172Возвращает остаток от деления по стандарту 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)`.173174Особые случаи следуют IEEE 754: в частности, `remainder(x, math.inf)` равно *x* для любого конечного *x*, а `remainder(x, 0)` и `remainder(math.inf, x)` возбуждают [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError) для любого не-NaN *x*. Если результат операции остатка равен нулю, этот нуль будет иметь тот же знак, что и *x*.175176На платформах, использующих двоичную арифметику с плавающей запятой IEEE 754, результат этой операции всегда представим точно: погрешность округления не вносится.177178Добавлено в версии 3.7.179180#### `math.sumprod(p, q)`181182Возвращает сумму произведений значений из двух итерируемых объектов *p* и *q*.183184Возбуждает [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError), если входные данные имеют разную длину.185186Примерно эквивалентно:187188```python189sum(itertools.starmap(operator.mul, zip(p, q, strict=True)))190```191192Для входных данных типа float и смешанных int/float промежуточные произведения и суммы вычисляются с расширенной точностью.193194Добавлено в версии 3.12.195196#### `math.trunc(x)`197198Возвращает *x* с отброшенной дробной частью, оставляя только целую часть. Это округление в сторону нуля: `trunc()` эквивалентно [`floor()`](https://python-all.ru/3.12/library/math.html#math.floor) для положительных *x* и эквивалентно [`ceil()`](https://python-all.ru/3.12/library/math.html#math.ceil) для отрицательных *x*. Если *x* не является float, делегирует [`x.__trunc__`](https://python-all.ru/3.12/reference/datamodel.html#object.__trunc__), которая должна возвращать значение [`Integral`](https://python-all.ru/3.12/library/numbers.html#numbers.Integral).199200#### `math.ulp(x)`201202Возвращает значение наименее значащего бита числа с плавающей запятой *x*:203204- Если *x* – NaN (не число), возвращает *x*.205- Если *x* отрицательно, возвращает `ulp(-x)`.206- Если *x* – положительная бесконечность, возвращает *x*.207- Если *x* равен нулю, возвращает наименьший положительный *денормализованный* представимый float (меньше минимального положительного *нормализованного* float, [`sys.float_info.min`](https://python-all.ru/3.12/library/sys.html#sys.float_info)).208- Если *x* равен наибольшему положительному представимому float, возвращает значение наименее значащего бита *x*, такое, что первый float, меньший *x*, равен `x - ulp(x)`.209- В противном случае (*x* – положительное конечное число) возвращает значение наименее значащего бита *x*, такое, что первый float, больший *x*, равен `x + ulp(x)`.210211ULP означает «единица в последнем разряде».212213См. также [`math.nextafter()`](https://python-all.ru/3.12/library/math.html#math.nextafter) и [`sys.float_info.epsilon`](https://python-all.ru/3.12/library/sys.html#sys.float_info).214215Добавлено в версии 3.9.216217Обратите внимание, что [`frexp()`](https://python-all.ru/3.12/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/3.12/library/math.html#math.modf) имеют иной шаблон вызова и возврата, чем их эквиваленты на C: они принимают один аргумент и возвращают пару значений, а не возвращают второе возвращаемое значение через «выходной параметр» (в Python такого нет).218219Для функций [`ceil()`](https://python-all.ru/3.12/library/math.html#math.ceil), [`floor()`](https://python-all.ru/3.12/library/math.html#math.floor) и [`modf()`](https://python-all.ru/3.12/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Float в Python обычно имеют точность не более 53 бит (как и тип C double на данной платформе), и в этом случае любой float *x* с `abs(x) >= 2**52` не имеет дробных битов.220221## Степенные и логарифмические функции222223#### `math.cbrt(x)`224225Возвращает кубический корень из *x*.226227Добавлено в версии 3.12.228229#### `math.exp(x)`230231Возвращает *e*, возведённое в степень *x*, где *e* = 2.718281… – основание натуральных логарифмов. Обычно это точнее, чем `math.e ** x` или `pow(math.e, x)`.232233#### `math.exp2(x)`234235Возвращает *2*, возведённое в степень *x*.236237Добавлено в версии 3.12.238239#### `math.expm1(x)`240241Возвращает *e*, возведённое в степень *x*, минус 1. Здесь *e* – основание натуральных логарифмов. Для малых чисел с плавающей запятой *x* вычитание в `exp(x) - 1` может привести к [значительной потере точности](https://python-all.ru/3.12/library/math.html); функция [`expm1()`](https://python-all.ru/3.12/library/math.html#math.expm1) позволяет вычислить это значение с полной точностью:242243```python244>>> from math import exp, expm1245>>> exp(1e-5) - 1 # даёт результат с точностью до 11 знаков2461.0000050000069649e-05247>>> expm1(1e-5) # результат с полной точностью2481.0000050000166668e-05249```250251Добавлено в версии 3.2.252253#### `math.log(x[, base])`254255С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).256257С двумя аргументами возвращает логарифм *x* по заданному основанию *base*, вычисленный как `log(x)/log(base)`.258259#### `math.log1p(x)`260261Возвращает натуральный логарифм *1+x* (основание *e*). Результат вычисляется способом, точным для *x* вблизи нуля.262263#### `math.log2(x)`264265Возвращает двоичный логарифм *x*. Обычно это точнее, чем `log(x, 2)`.266267Добавлено в версии 3.3.268269> **См. также**270>271> [`int.bit_length()`](https://python-all.ru/3.12/library/stdtypes.html#int.bit_length) возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей.272273#### `math.log10(x)`274275Возвращает десятичный логарифм *x*. Обычно это точнее, чем `log(x, 10)`.276277#### `math.pow(x, y)`278279Возвращает `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.12/library/exceptions.html#ValueError).280281В отличие от встроенного оператора `**`, [`math.pow()`](https://python-all.ru/3.12/library/math.html#math.pow) преобразует оба аргумента к типу [`float`](https://python-all.ru/3.12/library/functions.html#float). Используйте `**` или встроенную функцию [`pow()`](https://python-all.ru/3.12/library/functions.html#pow) для точного вычисления целочисленных степеней.282283Изменено в версии 3.11: Особые случаи `pow(0.0, -inf)` и `pow(-0.0, -inf)` были изменены так, чтобы возвращать `inf` вместо возбуждения [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError), для согласованности с IEEE 754.284285#### `math.sqrt(x)`286287Возвращает квадратный корень из *x*.288289## Тригонометрические функции290291#### `math.acos(x)`292293Возвращает арккосинус *x* в радианах. Результат находится в диапазоне от `0` до `pi`.294295#### `math.asin(x)`296297Возвращает арксинус *x* в радианах. Результат находится в диапазоне от `-pi/2` до `pi/2`.298299#### `math.atan(x)`300301Возвращает арктангенс *x* в радианах. Результат находится в диапазоне от `-pi/2` до `pi/2`.302303#### `math.atan2(y, x)`304305Возвращает `atan(y / x)` в радианах. Результат находится в диапазоне от `-pi` до `pi`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Особенность [`atan2()`](https://python-all.ru/3.12/library/math.html#math.atan2) в том, что ему известны знаки обоих аргументов, поэтому он может вычислить правильный квадрант для угла. Например, `atan(1)` и `atan2(1, 1)` равны `pi/4`, но `atan2(-1, -1)` равен `-3*pi/4`.306307#### `math.cos(x)`308309Возвращает косинус *x* радиан.310311#### `math.dist(p, q)`312313Возвращает евклидово расстояние между двумя точками *p* и *q*, каждая из которых задаётся как последовательность (или итерируемый объект) координат. Обе точки должны иметь одинаковую размерность.314315Примерно эквивалентно:316317```python318sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))319```320321Добавлено в версии 3.8.322323#### `math.hypot(*coordinates)`324325Возвращает евклидову норму, `sqrt(sum(x**2 for x in coordinates))`. Это длина вектора от начала координат до точки, заданной координатами.326327Для двумерной точки `(x, y)` это эквивалентно вычислению гипотенузы прямоугольного треугольника по теореме Пифагора, `sqrt(x*x + y*y)`.328329Изменено в версии 3.8: Добавлена поддержка n-мерных точек. Ранее поддерживался только двумерный случай.330331Изменено в версии 3.10: Улучшена точность алгоритма так, что максимальная ошибка составляет менее 1 ulp (единицы в последнем разряде). Как правило, результат почти всегда правильно округлён с точностью до 1/2 ulp.332333#### `math.sin(x)`334335Возвращает синус *x* радиан.336337#### `math.tan(x)`338339Возвращает тангенс *x* радиан.340341## Преобразование углов342343#### `math.degrees(x)`344345Преобразует угол *x* из радианов в градусы.346347#### `math.radians(x)`348349Преобразует угол *x* из градусов в радианы.350351## Гиперболические функции352353[Гиперболические функции](https://python-all.ru/3.12/library/math.html) – это аналоги тригонометрических функций, основанные на гиперболах, а не на окружностях.354355#### `math.acosh(x)`356357Возвращает обратный гиперболический косинус *x*.358359#### `math.asinh(x)`360361Возвращает обратный гиперболический синус *x*.362363#### `math.atanh(x)`364365Возвращает обратный гиперболический тангенс *x*.366367#### `math.cosh(x)`368369Возвращает гиперболический косинус *x*.370371#### `math.sinh(x)`372373Возвращает гиперболический синус *x*.374375#### `math.tanh(x)`376377Возвращает гиперболический тангенс *x*.378379## Специальные функции380381#### `math.erf(x)`382383Возвращает значение [функции ошибок](https://python-all.ru/3.12/library/math.html) в точке *x*.384385Функция [`erf()`](https://python-all.ru/3.12/library/math.html#math.erf) может использоваться для вычисления традиционных статистических функций, таких как [кумулятивное стандартное нормальное распределение](https://python-all.ru/3.12/library/math.html):386387```python388def phi(x):389 'Cumulative distribution function for the standard normal distribution'390 return (1.0 + erf(x / sqrt(2.0))) / 2.0391```392393Добавлено в версии 3.2.394395#### `math.erfc(x)`396397Возвращает дополнительную функцию ошибок в точке *x*. [Дополнительная функция ошибок](https://python-all.ru/3.12/library/math.html) определяется как `1.0 - erf(x)`. Она используется для больших значений *x*, где вычитание из единицы может привести к [потере значимости](https://python-all.ru/3.12/library/math.html).398399Добавлено в версии 3.2.400401#### `math.gamma(x)`402403Возвращает значение [гамма-функции](https://python-all.ru/3.12/library/math.html) в точке *x*.404405Добавлено в версии 3.2.406407#### `math.lgamma(x)`408409Возвращает натуральный логарифм абсолютного значения гамма-функции в точке *x*.410411Добавлено в версии 3.2.412413## Константы414415#### `math.pi`416417Математическая константа *π* = 3,141592… с доступной точностью.418419#### `math.e`420421Математическая константа *e* = 2,718281… с доступной точностью.422423#### `math.tau`424425Математическая константа *τ* = 6,283185… с доступной точностью. Тау – это константа окружности, равная 2*π*, отношению длины окружности к её радиусу. Чтобы узнать больше о Тау, посмотрите видео Ви Харт [Pi is (still) Wrong](https://python-all.ru/3.12/library/math.html) и начните праздновать [День Тау](https://python-all.ru/3.12/library/math.html), съев вдвое больше пирога!426427Добавлено в версии 3.6.428429#### `math.inf`430431Положительная бесконечность с плавающей запятой. (Для отрицательной бесконечности используйте `-math.inf`.) Эквивалентно результату `float('inf')`.432433Добавлено в версии 3.5.434435#### `math.nan`436437Значение с плавающей запятой «не число» (NaN). Эквивалентно результату `float('nan')`. В соответствии с требованиями стандарта [IEEE-754](https://python-all.ru/3.12/library/math.html), `math.nan` и `float('nan')` не считаются равными никакому другому числовому значению, включая самих себя. Чтобы проверить, является ли число NaN, используйте функцию [`isnan()`](https://python-all.ru/3.12/library/math.html#math.isnan) для проверки на NaN вместо `is` или `==`. Пример:438439```python440>>> import math441>>> math.nan == math.nan442False443>>> float('nan') == float('nan')444False445>>> math.isnan(math.nan)446True447>>> math.isnan(float('nan'))448True449```450451Добавлено в версии 3.5.452453Изменено в версии 3.11: Теперь всегда доступно.454455**Особенность реализации CPython:** Модуль [`math`](https://python-all.ru/3.12/library/math.html#module-math) в основном состоит из тонких обёрток вокруг функций математической библиотеки C платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация вызывает [`ValueError`](https://python-all.ru/3.12/library/exceptions.html#ValueError) для недопустимых операций, таких как `sqrt(-1.0)` или `log(0.0)` (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и [`OverflowError`](https://python-all.ru/3.12/library/exceptions.html#OverflowError) для результатов, вызывающих переполнение (например, `exp(1000.0)`). NaN не будет возвращён ни одной из указанных выше функций, если только один или несколько входных аргументов не были NaN; в этом случае большинство функций вернут NaN, но (опять же следуя приложению F C99) есть некоторые исключения из этого правила, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.456457Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.458459> **См. также**460>461> **Модуль [`cmath`](https://python-all.ru/3.12/library/cmath.html#module-cmath)**462>463> Версии многих из этих функций для комплексных чисел.464