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

math.md

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

1> **Источник:** https://python-all.ru/3.1/library/math.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 9.2. `math` – Математические функции89Этот модуль всегда доступен. Он предоставляет доступ к математическим функциям, определённым в стандарте C.1011Эти функции нельзя использовать с комплексными числами; для работы с ними используйте одноимённые функции из модуля [`cmath`](https://python-all.ru/3.1/library/cmath.html#module-cmath), если необходима поддержка комплексных чисел. Функции разделены на поддерживающие комплексные числа и не поддерживающие, потому что большинство пользователей не хотят изучать столько математики, сколько требуется для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить неожиданное комплексное число, переданное как параметр; так программист может выяснить, как и почему оно появилось.1213Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.1415## 9.2.1. Теоретико-числовые функции и функции представления1617#### `math.ceil(x)`1819Возвращает потолок2021*x*2223, наименьшее целое число, большее или равное2425*x*2627. Если2829*x*3031– не число с плавающей запятой, передает управление3233`x.__ceil__()`3435, которая должна вернуть целочисленное значение3637`Integral`3839.4041#### `math.copysign(x, y)`4243Возвращает4445*x*4647со знаком4849*y*5051. На платформах, поддерживающих знаковый ноль,5253`copysign(1.0, -0.0)`5455возвращает5657*-1.0*5859.6061#### `math.fabs(x)`6263Возвращает абсолютное значение6465*x*6667.6869#### `math.factorial(x)`7071Возвращает факториал7273*x*7475. Вызывает7677[`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError)7879, если8081*x*8283не является целым числом или отрицательно.8485#### `math.floor(x)`8687Возвращает пол8889*x*9091, наибольшее целое число, меньшее или равное9293*x*9495. Если9697*x*9899– не число с плавающей запятой, передает управление100101`x.__floor__()`102103, которая должна вернуть целочисленное значение104105`Integral`106107.108109#### `math.fmod(x, y)`110111Возвращает112113`fmod(x, y)`114115, как определено в библиотеке C платформы. Обратите внимание, что выражение Python116117`x % y`118119может возвращать не тот же результат. По стандарту C120121`fmod(x, y)`122123должен быть точно (математически, с бесконечной точностью) равен124125`x - n*y`126127для некоторого целого128129*n*130131, такого что результат имеет тот же знак, что и132133*x*134135, и модуль меньше136137`abs(y)`138139. Выражение Python140141`x % y`142143возвращает результат со знаком144145*y*146147и может быть невычислимо точно для аргументов с плавающей запятой. Например,148149`fmod(-1e-100, 1e100)`150151равно152153`-1e-100`154155, но результат Python156157`-1e-100 % 1e100`158159равен160161`1e100-1e-100`162163, который не может быть представлен точно как float и округляется до неожиданного164165`1e100`166167. По этой причине функция168169[`fmod()`](https://python-all.ru/3.1/library/math.html#math.fmod)170171обычно предпочтительнее при работе с числами с плавающей запятой, а выражение Python172173`x % y`174175– при работе с целыми числами.176177#### `math.frexp(x)`178179Возвращает мантиссу и экспоненту180181*x*182183в виде пары184185`(m, e)`186187.188189*m*190191– число с плавающей запятой,192193*e*194195– целое число, такие что196197`x == m * 2**e`198199точно. Если200201*x*202203равно нулю, возвращает204205`(0.0, 0)`206207, иначе208209`0.5 <= abs(m) < 1`210211. Используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.212213#### `math.fsum(iterable)`214215Возвращает точную сумму чисел с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм:216217```python218>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])2190.9999999999999999220>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])2211.0222```223224Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.225226Для более подробного обсуждения и двух альтернативных подходов см. [рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой](https://python-all.ru/3.1/library/math.html).227228#### `math.isinf(x)`229230Проверяет, является ли число с плавающей запятой231232*x*233234положительной или отрицательной бесконечностью.235236#### `math.isnan(x)`237238Проверяет, является ли число с плавающей запятой239240*x*241242значением NaN (не число). Для получения дополнительной информации о NaN см. стандарт IEEE 754.243244#### `math.ldexp(x, i)`245246Возвращает247248`x * (2**i)`249250. Это, по сути, обратная функция к251252[`frexp()`](https://python-all.ru/3.1/library/math.html#math.frexp)253254.255256#### `math.modf(x)`257258Возвращает дробную и целую части259260*x*261262. Оба результата имеют тот же знак, что и263264*x*265266, и являются числами с плавающей запятой.267268#### `math.trunc(x)`269270Возвращает значение271272`Real`273274*x*275276, усечённое до типа277278`Integral`279280(обычно целого числа). Передает управление281282`x.__trunc__()`283284.285286Обратите внимание, что [`frexp()`](https://python-all.ru/3.1/library/math.html#math.frexp) и [`modf()`](https://python-all.ru/3.1/library/math.html#math.modf) имеют другой шаблон вызова/возврата, чем их эквиваленты в C: они принимают один аргумент и возвращают пару значений, а не возвращают второе значение через «выходной параметр» (такого в Python нет).287288Для функций [`ceil()`](https://python-all.ru/3.1/library/math.html#math.ceil), [`floor()`](https://python-all.ru/3.1/library/math.html#math.floor) и [`modf()`](https://python-all.ru/3.1/library/math.html#math.modf) обратите внимание, что *все* числа с плавающей запятой достаточно большой величины являются точными целыми числами. Числа с плавающей запятой Python обычно имеют не более 53 бит точности (как и тип double в C), и в этом случае любой float *x* с `abs(x) >= 2**52` обязательно не имеет дробных битов.289290## 9.2.2. Степенные и логарифмические функции291292#### `math.exp(x)`293294Возвращает295296`e**x`297298.299300#### `math.log(x[, base])`301302С одним аргументом возвращает натуральный логарифм *x* (по основанию *e*).303304С двумя аргументами возвращает логарифм *x* по заданному *основанию*, вычисляемый как `log(x)/log(base)`.305306#### `math.log1p(x)`307308Возвращает натуральный логарифм309310*1+x*311312(основание313314*e*315316). Результат вычисляется способом, точным для317318*x*319320вблизи нуля.321322#### `math.log10(x)`323324Возвращает десятичный логарифм325326*x*327328. Обычно это точнее, чем329330`log(x, 10)`331332.333334#### `math.pow(x, y)`335336Возвращает337338`x`339340, возведённое в степень341342`y`343344. Особые случаи по возможности следуют Приложению ‘F’ стандарта C99. В частности,345346`pow(1.0, x)`347348и349350`pow(x, 0.0)`351352всегда возвращают353354`1.0`355356, даже когда357358`x`359360– ноль или NaN. Если и361362`x`363364, и365366`y`367368конечны,369370`x`371372отрицательно, а373374`y`375376не является целым, то377378`pow(x, y)`379380не определён и вызывает381382[`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError)383384.385386#### `math.sqrt(x)`387388Возвращает квадратный корень из389390*x*391392.393394## 9.2.3. Тригонометрические функции395396#### `math.acos(x)`397398Возвращает арккосинус399400*x*401402в радианах.403404#### `math.asin(x)`405406Возвращает арксинус407408*x*409410в радианах.411412#### `math.atan(x)`413414Возвращает арктангенс415416*x*417418в радианах.419420#### `math.atan2(y, x)`421422Возвращает423424`atan(y / x)`425426, в радианах. Результат находится между427428`-pi`429430и431432`pi`433434. Вектор на плоскости от начала координат до точки435436`(x, y)`437438образует этот угол с положительной осью X. Смысл439440[`atan2()`](https://python-all.ru/3.1/library/math.html#math.atan2)441442в том, что знаки обоих аргументов известны, поэтому она может вычислить правильный квадрант для угла. Например,443444`atan(1)`445446и447448`atan2(1, 1)`449450оба равны451452`pi/4`453454, но455456`atan2(-1, -1)`457458равно459460`-3*pi/4`461462.463464#### `math.cos(x)`465466Возвращает косинус467468*x*469470радиан.471472#### `math.hypot(x, y)`473474Возвращает евклидову норму,475476`sqrt(x*x + y*y)`477478. Это длина вектора от начала координат до точки479480`(x, y)`481482.483484#### `math.sin(x)`485486Возвращает синус487488*x*489490радиан.491492#### `math.tan(x)`493494Возвращает тангенс495496*x*497498радиан.499500## 9.2.4. Преобразование углов501502#### `math.degrees(x)`503504Преобразует угол505506*x*507508из радианов в градусы.509510#### `math.radians(x)`511512Преобразует угол513514*x*515516из градусов в радианы.517518## 9.2.5. Гиперболические функции519520#### `math.acosh(x)`521522Возвращает обратный гиперболический косинус523524*x*525526.527528#### `math.asinh(x)`529530Возвращает обратный гиперболический синус531532*x*533534.535536#### `math.atanh(x)`537538Возвращает обратный гиперболический тангенс539540*x*541542.543544#### `math.cosh(x)`545546Возвращает гиперболический косинус547548*x*549550.551552#### `math.sinh(x)`553554Возвращает гиперболический синус555556*x*557558.559560#### `math.tanh(x)`561562Возвращает гиперболический тангенс563564*x*565566.567568## 9.2.6. Константы569570#### `math.pi`571572Математическая константа π = 3.141592... с точностью, доступной в системе.573574#### `math.e`575576Математическая константа e = 2.718281... с точностью, доступной в системе.577578**Особенность реализации CPython:** Модуль `math` в основном состоит из тонких обёрток вокруг функций математической библиотеки C соответствующей платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация возбуждает [`ValueError`](https://python-all.ru/3.1/library/exceptions.html#ValueError) для некорректных операций, таких как `sqrt(-1.0)` или `log(0.0)` (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и [`OverflowError`](https://python-all.ru/3.1/library/exceptions.html#OverflowError) для результатов, которые приводят к переполнению (например, `exp(1000.0)`). NaN не будет возвращён ни одной из перечисленных функций выше, если только один или несколько входных аргументов не были NaN; в этом случае, большинство функций вернёт NaN, но (снова следуя приложению F C99) есть некоторые исключения из этого правила, например `pow(float('nan'), 0.0)` или `hypot(float('nan'), float('inf'))`.579580Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.581582> **См. также**583>584> **Модуль [`cmath`](https://python-all.ru/3.1/library/cmath.html#module-cmath)**585>586> Версии многих из этих функций для комплексных чисел.587