math.md
1> **Источник:** https://python-all.ru/2.7/library/math.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.2. [`math`](https://python-all.ru/2.7/library/math.html#module-math) – Математические функции89Этот модуль всегда доступен. Он предоставляет доступ к математическим функциям, определённым в стандарте C.1011Эти функции нельзя использовать с комплексными числами; если нужна поддержка комплексных чисел, используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/2.7/library/cmath.html#module-cmath). Различие между функциями, поддерживающими комплексные числа, и теми, которые их не поддерживают, проведено потому, что большинству пользователей не нужно углубляться в математику, необходимую для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить непредвиденное комплексное число, переданное в качестве параметра, так что программист может выяснить, как и почему оно возникло.1213Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.1415## 9.2.1. Теоретико-числовые функции и функции представления1617#### `math.ceil(x)`1819Возвращает потолок *x* в виде числа с плавающей запятой – наименьшее целое значение, большее или равное *x*.2021#### `math.copysign(x, y)`2223Возвращает *x* со знаком *y*. На платформах, поддерживающих знаковый ноль, `copysign(1.0, -0.0)` возвращает *-1.0*.2425Новое в версии 2.6.2627#### `math.fabs(x)`2829Возвращает абсолютное значение *x*.3031#### `math.factorial(x)`3233Возвращает факториал *x*. Возбуждает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError), если *x* не является целым числом или является отрицательным.3435Новое в версии 2.6.3637#### `math.floor(x)`3839Возвращает пол *x* в виде числа с плавающей запятой – наибольшее целое значение, меньшее или равное *x*.4041#### `math.fmod(x, y)`4243Возвращает `fmod(x, y)`, как определено библиотекой C платформы. Обратите внимание, что 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/2.7/library/math.html#math.fmod) обычно предпочтительнее при работе с float, в то время как `x % y` предпочтительнее при работе с целыми числами.4445#### `math.frexp(x)`4647Возвращает мантиссу и экспоненту числа *x* в виде пары `(m, e)`. *m* – число с плавающей запятой, а *e* – целое число, такие что `x == m * 2**e` точно. Если *x* равно нулю, возвращает `(0.0, 0)`, иначе `0.5 <= abs(m) < 1`. Это используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.4849#### `math.fsum(iterable)`5051Возвращает точную сумму чисел с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм:5253```python54>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])550.999999999999999956>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])571.058```5960Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.6162Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/2.7/library/math.html).6364Новое в версии 2.6.6566#### `math.isinf(x)`6768Проверяет, является ли число с плавающей запятой *x* положительной или отрицательной бесконечностью.6970Новое в версии 2.6.7172#### `math.isnan(x)`7374Проверяет, является ли число с плавающей запятой *x* значением NaN (не число). Для получения дополнительной информации о NaN см. стандарт IEEE 754.7576Новое в версии 2.6.7778#### `math.ldexp(x, i)`7980Возвращает `x * (2**i)`. По сути, это обратная функция по отношению к [`frexp()`](https://python-all.ru/2.7/library/math.html#math.frexp).8182#### `math.modf(x)`8384Возвращает дробную и целую части *x*. Оба результата имеют тот же знак, что и *x*, и являются числами с плавающей запятой.8586#### `math.trunc(x)`8788Return the [`Real`](https://python-all.ru/2.7/library/numbers.html#numbers.Real) value *x* truncated to an [`Integral`](https://python-all.ru/2.7/library/numbers.html#numbers.Integral) (usually a long integer). Uses the `__trunc__` method.8990Новое в версии 2.6.9192Обратите внимание, что [`frexp()`](https://python-all.ru/2.7/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/2.7/library/math.html#math.modf) имеют иной шаблон вызова и возврата, чем их эквиваленты на C: они принимают один аргумент и возвращают пару значений, а не возвращают второе возвращаемое значение через «выходной параметр» (в Python такого нет).9394Для функций [`ceil()`](https://python-all.ru/2.7/library/math.html#math.ceil), [`floor()`](https://python-all.ru/2.7/library/math.html#math.floor) и [`modf()`](https://python-all.ru/2.7/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Float в Python обычно имеют точность не более 53 бит (как и тип C double на данной платформе), и в этом случае любой float *x* с `abs(x) >= 2**52` не имеет дробных битов.9596## 9.2.2. Степенные и логарифмические функции9798#### `math.exp(x)`99100Вернуть `e**x`.101102#### `math.expm1(x)`103104Возвращает `e**x - 1`. Для малых чисел с плавающей запятой *x* вычитание в `exp(x) - 1` может привести к значительной потере точности; функция [`expm1()`](https://python-all.ru/2.7/library/math.html#math.expm1) предоставляет способ вычисления этого значения с полной точностью:105106```python107>>> from math import exp, expm1108>>> exp(1e-5) - 1 # даёт результат с точностью до 11 знаков1091.0000050000069649e-05110>>> expm1(1e-5) # результат с полной точностью1111.0000050000166668e-05112```113114Новое в версии 2.7.115116#### `math.log(x[, base])`117118С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).119120С двумя аргументами возвращает логарифм *x* по заданному основанию *base*, вычисленный как `log(x)/log(base)`.121122Изменено в версии 2.3: добавлен аргумент *base*.123124#### `math.log1p(x)`125126Возвращает натуральный логарифм *1+x* (основание *e*). Результат вычисляется способом, точным для *x* вблизи нуля.127128Новое в версии 2.6.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/2.7/library/exceptions.html#exceptions.ValueError).137138В отличие от встроенного оператора `**`, [`math.pow()`](https://python-all.ru/2.7/library/math.html#math.pow) преобразует оба аргумента к типу [`float`](https://python-all.ru/2.7/library/functions.html#float). Используйте `**` или встроенную функцию [`pow()`](https://python-all.ru/2.7/library/functions.html#pow) для точного вычисления целочисленных степеней.139140Изменено в версии 2.6: Результат `1**nan` и `nan**0` был неопределён.141142#### `math.sqrt(x)`143144Возвращает квадратный корень из *x*.145146## 9.2.3. Тригонометрические функции147148#### `math.acos(x)`149150Возвращает арккосинус *x* в радианах.151152#### `math.asin(x)`153154Возвращает арксинус *x* в радианах.155156#### `math.atan(x)`157158Возвращает арктангенс *x* в радианах.159160#### `math.atan2(y, x)`161162Возвращает `atan(y / x)` в радианах. Результат находится в диапазоне от `-pi` до `pi`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Особенность [`atan2()`](https://python-all.ru/2.7/library/math.html#math.atan2) в том, что ему известны знаки обоих аргументов, поэтому он может вычислить правильный квадрант для угла. Например, `atan(1)` и `atan2(1, 1)` равны `pi/4`, но `atan2(-1, -1)` равен `-3*pi/4`.163164#### `math.cos(x)`165166Возвращает косинус *x* радиан.167168#### `math.hypot(x, y)`169170Возвращает евклидову норму `sqrt(x*x + y*y)`. Это длина вектора от начала координат до точки `(x, y)`.171172#### `math.sin(x)`173174Возвращает синус *x* радиан.175176#### `math.tan(x)`177178Возвращает тангенс *x* радиан.179180## 9.2.4. Преобразование углов181182#### `math.degrees(x)`183184Преобразует угол *x* из радианов в градусы.185186#### `math.radians(x)`187188Преобразует угол *x* из градусов в радианы.189190## 9.2.5. Гиперболические функции191192#### `math.acosh(x)`193194Возвращает обратный гиперболический косинус *x*.195196Новое в версии 2.6.197198#### `math.asinh(x)`199200Возвращает обратный гиперболический синус *x*.201202Новое в версии 2.6.203204#### `math.atanh(x)`205206Возвращает обратный гиперболический тангенс *x*.207208Новое в версии 2.6.209210#### `math.cosh(x)`211212Возвращает гиперболический косинус *x*.213214#### `math.sinh(x)`215216Возвращает гиперболический синус *x*.217218#### `math.tanh(x)`219220Возвращает гиперболический тангенс *x*.221222## 9.2.6. Специальные функции223224#### `math.erf(x)`225226Возвращает функцию ошибок в точке *x*.227228Новое в версии 2.7.229230#### `math.erfc(x)`231232Возвращает дополнительную функцию ошибок в точке *x*.233234Новое в версии 2.7.235236#### `math.gamma(x)`237238Возвращает гамма-функцию в точке *x*.239240Новое в версии 2.7.241242#### `math.lgamma(x)`243244Возвращает натуральный логарифм абсолютного значения гамма-функции в точке *x*.245246Новое в версии 2.7.247248## 9.2.7. Константы249250#### `math.pi`251252Математическая константа π = 3.141592…, с доступной точностью.253254#### `math.e`255256Математическая константа e = 2.718281…, с доступной точностью.257258**Особенность реализации CPython:** Модуль [`math`](https://python-all.ru/2.7/library/math.html#module-math) в основном состоит из тонких обёрток вокруг функций математической библиотеки C платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация вызывает [`ValueError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.ValueError) для недопустимых операций, таких как `sqrt(-1.0)` или `log(0.0)` (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и [`OverflowError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.OverflowError) для результатов, вызывающих переполнение (например, `exp(1000.0)`). NaN не будет возвращён ни одной из указанных выше функций, если только один или несколько входных аргументов не были NaN; в этом случае большинство функций вернут NaN, но (опять же следуя приложению F C99) есть некоторые исключения из этого правила, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.259260Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.261262Изменено в версии 2.6: Поведение в особых случаях теперь стремится соответствовать приложению F стандарта C99. В более ранних версиях Python поведение в особых случаях было описано нестрого.263264> **См. также**265>266> **Модуль [`cmath`](https://python-all.ru/2.7/library/cmath.html#module-cmath)**267>268> Версии многих из этих функций для комплексных чисел.269