Документация Python неофициальный перевод

math.md

325 строк · 24.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.7/library/math.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`math`](https://python-all.ru/3.7/library/math.html#module-math) – Математические функции89---1011Этот модуль предоставляет доступ к математическим функциям, определённым стандартом C.1213Эти функции нельзя использовать с комплексными числами; если нужна поддержка комплексных чисел, используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/3.7/library/cmath.html#module-cmath). Различие между функциями, поддерживающими комплексные числа, и теми, которые их не поддерживают, проведено потому, что большинству пользователей не нужно углубляться в математику, необходимую для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить непредвиденное комплексное число, переданное в качестве параметра, так что программист может выяснить, как и почему оно возникло.1415Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.1617## Теоретико-числовые функции и функции представления1819#### `math.ceil(x)`2021Возвращает потолок *x* – наименьшее целое число, большее или равное *x*. Если *x* не является float, делегирует `x.__ceil__()`, которая должна вернуть значение [`Integral`](https://python-all.ru/3.7/library/numbers.html#numbers.Integral).2223#### `math.copysign(x, y)`2425Возвращает float с модулем (абсолютным значением) *x*, но со знаком *y*. На платформах, поддерживающих знаковый нуль, `copysign(1.0, -0.0)` возвращает *-1.0*.2627#### `math.fabs(x)`2829Возвращает абсолютное значение *x*.3031#### `math.factorial(x)`3233Возвращает факториал *x* в виде целого числа. Вызывает [`ValueError`](https://python-all.ru/3.7/library/exceptions.html#ValueError), если *x* не является целым или отрицательно.3435#### `math.floor(x)`3637Возвращает пол *x* – наибольшее целое число, меньшее или равное *x*. Если *x* не является float, делегирует `x.__floor__()`, которая должна вернуть значение [`Integral`](https://python-all.ru/3.7/library/numbers.html#numbers.Integral).3839#### `math.fmod(x, y)`4041Возвращает `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/3.7/library/math.html#math.fmod) обычно предпочтительнее при работе с float, в то время как `x % y` предпочтительнее при работе с целыми числами.4243#### `math.frexp(x)`4445Возвращает мантиссу и экспоненту числа *x* в виде пары `(m, e)`. *m* – число с плавающей запятой, а *e* – целое число, такие что `x == m * 2**e` точно. Если *x* равно нулю, возвращает `(0.0, 0)`, иначе `0.5 <= abs(m) < 1`. Это используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.4647#### `math.fsum(iterable)`4849Возвращает точную сумму чисел с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм:5051```python52>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])530.999999999999999954>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])551.056```5758Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.5960Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/3.7/library/math.html).6162#### `math.gcd(a, b)`6364Возвращает наибольший общий делитель целых чисел *a* и *b*. Если *a* или *b* не равно нулю, то значение `gcd(a, b)` – это наибольшее положительное целое число, которое делит как *a*, так и *b*. `gcd(0, 0)` возвращает `0`.6566Новое в версии 3.5.6768#### `math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)`6970Возвращает `True`, если значения *a* и *b* близки друг к другу, и `False` иначе.7172Близость двух значений определяется заданными абсолютной и относительной допустимыми погрешностями.7374*rel\_tol* – это относительная допустимая погрешность: максимально допустимая разница между *a* и *b*, взятая относительно большего абсолютного значения *a* или *b*. Например, чтобы установить погрешность 5%, передайте `rel_tol=0.05`. По умолчанию погрешность равна `1e-09`, что гарантирует совпадение двух значений с точностью примерно до 9 десятичных знаков. *rel\_tol* должен быть больше нуля.7576*abs\_tol* – это минимальная абсолютная допустимая погрешность, полезная для сравнений вблизи нуля. *abs\_tol* должен быть не меньше нуля.7778Если ошибок не возникло, результатом будет: `abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`.7980Особые значения IEEE 754: `NaN`, `inf` и `-inf` обрабатываются согласно правилам IEEE. В частности, `NaN` не считается близким ни к какому другому значению, включая `NaN`. `inf` и `-inf` считаются близкими только сами к себе.8182Новое в версии 3.5.8384> **См. также**85>86> [**PEP 485**](https://python-all.ru/3.7/library/math.html) – Функция для проверки приблизительного равенства8788#### `math.isfinite(x)`8990Возвращает `True`, если *x* не является ни бесконечностью, ни NaN, и `False` в противном случае. (Заметьте, что `0.0` *считается* конечным.)9192Новое в версии 3.2.9394#### `math.isinf(x)`9596Возвращает `True`, если *x* является положительной или отрицательной бесконечностью, и `False` в противном случае.9798#### `math.isnan(x)`99100Возвращает `True`, если *x* является NaN (не числом), и `False` в противном случае.101102#### `math.ldexp(x, i)`103104Возвращает `x * (2**i)`. По сути, это обратная функция по отношению к [`frexp()`](https://python-all.ru/3.7/library/math.html#math.frexp).105106#### `math.modf(x)`107108Возвращает дробную и целую части *x*. Оба результата имеют тот же знак, что и *x*, и являются числами с плавающей запятой.109110#### `math.remainder(x, y)`111112Возвращает остаток от деления по стандарту 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)`.113114Особые случаи следуют IEEE 754: в частности, `remainder(x, math.inf)` равно *x* для любого конечного *x*, а `remainder(x, 0)` и `remainder(math.inf, x)` возбуждают [`ValueError`](https://python-all.ru/3.7/library/exceptions.html#ValueError) для любого не-NaN *x*. Если результат операции остатка равен нулю, этот нуль будет иметь тот же знак, что и *x*.115116На платформах, использующих двоичные числа с плавающей запятой IEEE 754, результат этой операции всегда точно представим: ошибка округления не возникает.117118Добавлено в версии 3.7.119120#### `math.trunc(x)`121122Возвращает значение [`Real`](https://python-all.ru/3.7/library/numbers.html#numbers.Real) *x*, усечённое до [`Integral`](https://python-all.ru/3.7/library/numbers.html#numbers.Integral) (обычно целого числа). Делегирует [`x.__trunc__()`](https://python-all.ru/3.7/reference/datamodel.html#object.__trunc__).123124Обратите внимание, что [`frexp()`](https://python-all.ru/3.7/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/3.7/library/math.html#math.modf) имеют иной шаблон вызова и возврата, чем их эквиваленты на C: они принимают один аргумент и возвращают пару значений, а не возвращают второе возвращаемое значение через «выходной параметр» (в Python такого нет).125126Для функций [`ceil()`](https://python-all.ru/3.7/library/math.html#math.ceil), [`floor()`](https://python-all.ru/3.7/library/math.html#math.floor) и [`modf()`](https://python-all.ru/3.7/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Float в Python обычно имеют точность не более 53 бит (как и тип C double на данной платформе), и в этом случае любой float *x* с `abs(x) >= 2**52` не имеет дробных битов.127128## Степенные и логарифмические функции129130#### `math.exp(x)`131132Возвращает *e*, возведённое в степень *x*, где *e* = 2.718281… – основание натуральных логарифмов. Обычно это точнее, чем `math.e ** x` или `pow(math.e, x)`.133134#### `math.expm1(x)`135136Возвращает *e*, возведённое в степень *x*, минус 1. Здесь *e* – основание натуральных логарифмов. Для малых чисел с плавающей запятой *x* вычитание в `exp(x) - 1` может привести к [значительной потере точности](https://python-all.ru/3.7/library/math.html); функция [`expm1()`](https://python-all.ru/3.7/library/math.html#math.expm1) позволяет вычислить это значение с полной точностью:137138```python139>>> from math import exp, expm1140>>> exp(1e-5) - 1  # даёт результат с точностью до 11 знаков1411.0000050000069649e-05142>>> expm1(1e-5)    # результат с полной точностью1431.0000050000166668e-05144```145146Новое в версии 3.2.147148#### `math.log(x[, base])`149150С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).151152С двумя аргументами возвращает логарифм *x* по заданному основанию *base*, вычисленный как `log(x)/log(base)`.153154#### `math.log1p(x)`155156Возвращает натуральный логарифм *1+x* (основание *e*). Результат вычисляется способом, точным для *x* вблизи нуля.157158#### `math.log2(x)`159160Возвращает двоичный логарифм *x*. Обычно это точнее, чем `log(x, 2)`.161162Новое в версии 3.3.163164> **См. также**165>166> [`int.bit_length()`](https://python-all.ru/3.7/library/stdtypes.html#int.bit_length) возвращает количество битов, необходимое для представления целого числа в двоичном виде, без учёта знака и ведущих нулей.167168#### `math.log10(x)`169170Возвращает десятичный логарифм *x*. Обычно это точнее, чем `log(x, 10)`.171172#### `math.pow(x, y)`173174Возвращает `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.7/library/exceptions.html#ValueError).175176В отличие от встроенного оператора `**`, [`math.pow()`](https://python-all.ru/3.7/library/math.html#math.pow) преобразует оба аргумента к типу [`float`](https://python-all.ru/3.7/library/functions.html#float). Используйте `**` или встроенную функцию [`pow()`](https://python-all.ru/3.7/library/functions.html#pow) для точного вычисления целочисленных степеней.177178#### `math.sqrt(x)`179180Возвращает квадратный корень из *x*.181182## Тригонометрические функции183184#### `math.acos(x)`185186Возвращает арккосинус *x* в радианах.187188#### `math.asin(x)`189190Возвращает арксинус *x* в радианах.191192#### `math.atan(x)`193194Возвращает арктангенс *x* в радианах.195196#### `math.atan2(y, x)`197198Возвращает `atan(y / x)` в радианах. Результат находится в диапазоне от `-pi` до `pi`. Вектор на плоскости от начала координат до точки `(x, y)` образует этот угол с положительной осью X. Особенность [`atan2()`](https://python-all.ru/3.7/library/math.html#math.atan2) в том, что ему известны знаки обоих аргументов, поэтому он может вычислить правильный квадрант для угла. Например, `atan(1)` и `atan2(1, 1)` равны `pi/4`, но `atan2(-1, -1)` равен `-3*pi/4`.199200#### `math.cos(x)`201202Возвращает косинус *x* радиан.203204#### `math.hypot(x, y)`205206Возвращает евклидову норму `sqrt(x*x + y*y)`. Это длина вектора от начала координат до точки `(x, y)`.207208#### `math.sin(x)`209210Возвращает синус *x* радиан.211212#### `math.tan(x)`213214Возвращает тангенс *x* радиан.215216## Преобразование углов217218#### `math.degrees(x)`219220Преобразует угол *x* из радианов в градусы.221222#### `math.radians(x)`223224Преобразует угол *x* из градусов в радианы.225226## Гиперболические функции227228[Гиперболические функции](https://python-all.ru/3.7/library/math.html) – это аналоги тригонометрических функций, основанные на гиперболах, а не на окружностях.229230#### `math.acosh(x)`231232Возвращает обратный гиперболический косинус *x*.233234#### `math.asinh(x)`235236Возвращает обратный гиперболический синус *x*.237238#### `math.atanh(x)`239240Возвращает обратный гиперболический тангенс *x*.241242#### `math.cosh(x)`243244Возвращает гиперболический косинус *x*.245246#### `math.sinh(x)`247248Возвращает гиперболический синус *x*.249250#### `math.tanh(x)`251252Возвращает гиперболический тангенс *x*.253254## Специальные функции255256#### `math.erf(x)`257258Возвращает значение [функции ошибок](https://python-all.ru/3.7/library/math.html) в точке *x*.259260Функция [`erf()`](https://python-all.ru/3.7/library/math.html#math.erf) может использоваться для вычисления традиционных статистических функций, таких как [кумулятивное стандартное нормальное распределение](https://python-all.ru/3.7/library/math.html):261262```python263def phi(x):264    'Cumulative distribution function for the standard normal distribution'265    return (1.0 + erf(x / sqrt(2.0))) / 2.0266```267268Новое в версии 3.2.269270#### `math.erfc(x)`271272Возвращает дополнительную функцию ошибок в точке *x*. [Дополнительная функция ошибок](https://python-all.ru/3.7/library/math.html) определяется как `1.0 - erf(x)`. Она используется для больших значений *x*, где вычитание из единицы может привести к [потере значимости](https://python-all.ru/3.7/library/math.html).273274Новое в версии 3.2.275276#### `math.gamma(x)`277278Возвращает значение [гамма-функции](https://python-all.ru/3.7/library/math.html) в точке *x*.279280Новое в версии 3.2.281282#### `math.lgamma(x)`283284Возвращает натуральный логарифм абсолютного значения гамма-функции в точке *x*.285286Новое в версии 3.2.287288## Константы289290#### `math.pi`291292Математическая константа *π* = 3,141592… с доступной точностью.293294#### `math.e`295296Математическая константа *e* = 2,718281… с доступной точностью.297298#### `math.tau`299300Математическая константа *τ* = 6,283185… с доступной точностью. Тау – это константа окружности, равная 2*π*, отношению длины окружности к её радиусу. Чтобы узнать больше о Тау, посмотрите видео Ви Харт [Pi is (still) Wrong](https://python-all.ru/3.7/library/math.html) и начните праздновать [День Тау](https://python-all.ru/3.7/library/math.html), съев вдвое больше пирога!301302Новое в версии 3.6.303304#### `math.inf`305306Положительная бесконечность с плавающей запятой. (Для отрицательной бесконечности используйте `-math.inf`.) Эквивалентно результату `float('inf')`.307308Новое в версии 3.5.309310#### `math.nan`311312Значение с плавающей запятой «не число» (NaN). Эквивалентно результату `float('nan')`.313314Новое в версии 3.5.315316**Особенность реализации CPython:** Модуль [`math`](https://python-all.ru/3.7/library/math.html#module-math) в основном состоит из тонких обёрток вокруг функций математической библиотеки C платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация вызывает [`ValueError`](https://python-all.ru/3.7/library/exceptions.html#ValueError) для недопустимых операций, таких как `sqrt(-1.0)` или `log(0.0)` (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и [`OverflowError`](https://python-all.ru/3.7/library/exceptions.html#OverflowError) для результатов, вызывающих переполнение (например, `exp(1000.0)`). NaN не будет возвращён ни одной из указанных выше функций, если только один или несколько входных аргументов не были NaN; в этом случае большинство функций вернут NaN, но (опять же следуя приложению F C99) есть некоторые исключения из этого правила, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.317318Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.319320> **См. также**321>322> **Модуль [`cmath`](https://python-all.ru/3.7/library/cmath.html#module-cmath)**323>324> Версии многих из этих функций для комплексных чисел.325