math.md
1> **Источник:** https://python-all.ru/3.4/library/math.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.2. [`math`](https://python-all.ru/3.4/library/math.html#module-math) – Математические функции89Этот модуль всегда доступен. Он предоставляет доступ к математическим функциям, определённым в стандарте C.1011Эти функции нельзя использовать с комплексными числами; для работы с ними используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/3.4/library/cmath.html#module-cmath), если необходима поддержка комплексных чисел. Функции разделены на поддерживающие комплексные числа и не поддерживающие, потому что большинство пользователей не хотят изучать столько математики, сколько требуется для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить неожиданное комплексное число, переданное как параметр; так программист может выяснить, как и почему оно появилось.1213Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.1415## 9.2.1. Теоретико-числовые функции и функции представления1617#### `math.ceil(x)`1819Возвращает потолок *x*, наименьшее целое число, большее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение `x.__ceil__()`, который должен вернуть значение типа [`Integral`](https://python-all.ru/3.4/library/numbers.html#numbers.Integral).2021#### `math.copysign(x, y)`2223Возвращает число с плавающей запятой с модулем (абсолютным значением) *x* и знаком *y*. На платформах, поддерживающих знаковый ноль, `copysign(1.0, -0.0)` возвращает *-1.0*.2425#### `math.fabs(x)`2627Возвращает абсолютное значение *x*.2829#### `math.factorial(x)`3031Возвращает факториал *x*. Вызывает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если *x* не является целым числом или отрицательно.3233#### `math.floor(x)`3435Возвращает пол *x*, наибольшее целое число, меньшее или равное *x*. Если *x* не является числом с плавающей запятой, делегирует выполнение `x.__floor__()`, который должен вернуть значение типа [`Integral`](https://python-all.ru/3.4/library/numbers.html#numbers.Integral).3637#### `math.fmod(x, y)`3839Возвращает `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.4/library/math.html#math.fmod) обычно предпочтительнее при работе с числами с плавающей запятой, а выражение Python `x % y` – при работе с целыми числами.4041#### `math.frexp(x)`4243Возвращает мантиссу и экспоненту *x* в виде пары `(m, e)`. *m* – число с плавающей запятой, *e* – целое число, такие что `x == m * 2**e` точно. Если *x* равно нулю, возвращает `(0.0, 0)`, иначе `0.5 <= abs(m) < 1`. Используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.4445#### `math.fsum(iterable)`4647Возвращает точную сумму чисел с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм:4849```python50>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])510.999999999999999952>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])531.054```5556Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.5758Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/3.4/library/math.html).5960#### `math.isfinite(x)`6162Возвращает `True`, если *x* не является ни бесконечностью, ни NaN, и `False` в противном случае. (Обратите внимание, что `0.0` *считается* конечным.)6364Новое в версии 3.2.6566#### `math.isinf(x)`6768Возвращает `True`, если *x* является положительной или отрицательной бесконечностью, и `False` в противном случае.6970#### `math.isnan(x)`7172Возвращает `True`, если *x* является NaN (не числом), и `False` в противном случае.7374#### `math.ldexp(x, i)`7576Возвращает `x * (2**i)`. Это, по сути, обратная функция к [`frexp()`](https://python-all.ru/3.4/library/math.html#math.frexp).7778#### `math.modf(x)`7980Возвращает дробную и целую части *x*. Оба результата имеют тот же знак, что и *x*, и являются числами с плавающей запятой.8182#### `math.trunc(x)`8384Возвращает значение [`Real`](https://python-all.ru/3.4/library/numbers.html#numbers.Real) *x*, усечённое до [`Integral`](https://python-all.ru/3.4/library/numbers.html#numbers.Integral) (обычно целого числа). Делегирует выполнение `x.__trunc__()`.8586Обратите внимание, что [`frexp()`](https://python-all.ru/3.4/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/3.4/library/math.html#math.modf) имеют другой шаблон вызова/возврата, чем их эквиваленты в C: они принимают один аргумент и возвращают пару значений, а не возвращают второе значение через «выходной параметр» (такого в Python нет).8788Для функций [`ceil()`](https://python-all.ru/3.4/library/math.html#math.ceil), [`floor()`](https://python-all.ru/3.4/library/math.html#math.floor) и [`modf()`](https://python-all.ru/3.4/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Числа с плавающей запятой Python обычно имеют не более 53 бит точности (как и тип double в C), и в этом случае любой float *x* с `abs(x) >= 2**52` обязательно не имеет дробных битов.8990## 9.2.2. Степенные и логарифмические функции9192#### `math.exp(x)`9394Возвращает `e**x`.9596#### `math.expm1(x)`9798Возвращает `e**x - 1`. Для малых чисел с плавающей запятой *x* вычитание в `exp(x) - 1` может приводить к [значительной потере точности](https://python-all.ru/3.4/library/math.html); функция [`expm1()`](https://python-all.ru/3.4/library/math.html#math.expm1) позволяет вычислить это значение с полной точностью:99100```python101>>> from math import exp, expm1102>>> exp(1e-5) - 1 # даёт результат с точностью до 11 знаков1031.0000050000069649e-05104>>> expm1(1e-5) # результат с полной точностью1051.0000050000166668e-05106```107108Новое в версии 3.2.109110#### `math.log(x[, base])`111112С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).113114С двумя аргументами возвращает логарифм *x* по заданному *основанию*, вычисляемый как `log(x)/log(base)`.115116#### `math.log1p(x)`117118Возвращает натуральный логарифм *1+x* (основание *e*). Результат вычисляется способом, точным для *x* вблизи нуля.119120#### `math.log2(x)`121122Возвращает логарифм *x* по основанию 2. Обычно это точнее, чем `log(x, 2)`.123124Новое в версии 3.3.125126> **См. также**127>128> [`int.bit_length()`](https://python-all.ru/3.4/library/stdtypes.html#int.bit_length) возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей.129130#### `math.log10(x)`131132Возвращает десятичный логарифм *x*. Обычно это точнее, чем `log(x, 10)`.133134#### `math.pow(x, y)`135136Возвращает `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.4/library/exceptions.html#ValueError).137138В отличие от встроенного оператора `**`, [`math.pow()`](https://python-all.ru/3.4/library/math.html#math.pow) преобразует оба своих аргумента в тип [`float`](https://python-all.ru/3.4/library/functions.html#float). Используйте `**` или встроенную функцию [`pow()`](https://python-all.ru/3.4/library/functions.html#pow) для вычисления точных целочисленных степеней.139140#### `math.sqrt(x)`141142Возвращает квадратный корень из *x*.143144## 9.2.3. Тригонометрические функции145146#### `math.acos(x)`147148Возвращает арккосинус *x* в радианах.149150#### `math.asin(x)`151152Возвращает арксинус *x* в радианах.153154#### `math.atan(x)`155156Возвращает арктангенс *x* в радианах.157158#### `math.atan2(y, x)`159160Возвращает `atan(y / x)`, в радианах. Результат находится между `-pi` и `pi`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Смысл [`atan2()`](https://python-all.ru/3.4/library/math.html#math.atan2) в том, что знаки обоих аргументов известны, поэтому она может вычислить правильный квадрант для угла. Например, `atan(1)` и `atan2(1, 1)` оба равны `pi/4`, но `atan2(-1, -1)` равно `-3*pi/4`.161162#### `math.cos(x)`163164Возвращает косинус *x* радиан.165166#### `math.hypot(x, y)`167168Возвращает евклидову норму, `sqrt(x*x + y*y)`. Это длина вектора от начала координат до точки `(x, y)`.169170#### `math.sin(x)`171172Возвращает синус *x* радиан.173174#### `math.tan(x)`175176Возвращает тангенс *x* радиан.177178## 9.2.4. Преобразование углов179180#### `math.degrees(x)`181182Преобразует угол *x* из радианов в градусы.183184#### `math.radians(x)`185186Преобразует угол *x* из градусов в радианы.187188## 9.2.5. Гиперболические функции189190[Гиперболические функции](https://python-all.ru/3.4/library/math.html) – это аналоги тригонометрических функций, основанные на гиперболах, а не на окружностях.191192#### `math.acosh(x)`193194Возвращает обратный гиперболический косинус *x*.195196#### `math.asinh(x)`197198Возвращает обратный гиперболический синус *x*.199200#### `math.atanh(x)`201202Возвращает обратный гиперболический тангенс *x*.203204#### `math.cosh(x)`205206Возвращает гиперболический косинус *x*.207208#### `math.sinh(x)`209210Возвращает гиперболический синус *x*.211212#### `math.tanh(x)`213214Возвращает гиперболический тангенс *x*.215216## 9.2.6. Специальные функции217218#### `math.erf(x)`219220Возвращает значение [функции ошибок](https://python-all.ru/3.4/library/math.html) в точке *x*.221222Функцию [`erf()`](https://python-all.ru/3.4/library/math.html#math.erf) можно использовать для вычисления традиционных статистических функций, таких как [кумулятивное стандартное нормальное распределение](https://python-all.ru/3.4/library/math.html):223224```python225def phi(x):226 'Cumulative distribution function for the standard normal distribution'227 return (1.0 + erf(x / sqrt(2.0))) / 2.0228```229230Новое в версии 3.2.231232#### `math.erfc(x)`233234Возвращает дополнительную функцию ошибок в точке *x*. [Дополнительная функция ошибок](https://python-all.ru/3.4/library/math.html) определяется как `1.0 - erf(x)`. Она используется для больших значений *x*, где вычитание из единицы могло бы привести к [потере значимости](https://python-all.ru/3.4/library/math.html).235236Новое в версии 3.2.237238#### `math.gamma(x)`239240Возвращает значение [гамма-функции](https://python-all.ru/3.4/library/math.html) в точке *x*.241242Новое в версии 3.2.243244#### `math.lgamma(x)`245246Возвращает натуральный логарифм абсолютного значения гамма-функции в точке *x*.247248Новое в версии 3.2.249250## 9.2.7. Константы251252#### `math.pi`253254Математическая константа π = 3.141592... с точностью, доступной в системе.255256#### `math.e`257258Математическая константа e = 2.718281... с точностью, доступной в системе.259260**Особенность реализации CPython:** Модуль [`math`](https://python-all.ru/3.4/library/math.html#module-math) в основном состоит из тонких обёрток вокруг функций математической библиотеки C платформы. Поведение в исключительных случаях, где это применимо, соответствует Приложению F стандарта C99. Текущая реализация возбуждает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) для некорректных операций, таких как `sqrt(-1.0)` или `log(0.0)` (где Приложение F C99 рекомендует сигнализировать о некорректной операции или делении на ноль), и [`OverflowError`](https://python-all.ru/3.4/library/exceptions.html#OverflowError) для результатов, вызывающих переполнение (например, `exp(1000.0)`). NaN не будет возвращён ни одной из перечисленных функций, если только один или несколько входных аргументов не были NaN; в этом случае большинство функций вернут NaN, но (снова следуя Приложению F C99) из этого правила есть некоторые исключения, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.261262Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.263264> **См. также**265>266> **Модуль [`cmath`](https://python-all.ru/3.4/library/cmath.html#module-cmath)**267>268> Версии многих из этих функций для комплексных чисел.269