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

9.2. math – Математические функцииmath – Mathematical functions

Этот модуль всегда доступен. Он предоставляет доступ к математическим функциям, определённым в стандарте C.

Эти функции нельзя использовать с комплексными числами; для работы с ними используйте одноимённые функции из модуля cmath, если необходима поддержка комплексных чисел. Функции разделены на поддерживающие комплексные числа и не поддерживающие, потому что большинство пользователей не хотят изучать столько математики, сколько требуется для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить неожиданное комплексное число, переданное как параметр; так программист может выяснить, как и почему оно появилось.

Модуль предоставляет следующие функции. Если не указано иное, все возвращаемые значения являются числами с плавающей запятой.

9.2.1. Теоретико-числовые функции и функции представленияNumber-theoretic and representation functions

math.ceil(x)
Возвращает потолок x, наименьшее целое число, большее или равное x. Если x – не число с плавающей запятой, передает управление x.__ceil__(), которая должна вернуть целочисленное значение Integral.
math.copysign(x, y)
Возвращает x со знаком y. На платформах, поддерживающих знаковый ноль, copysign(1.0, -0.0) возвращает -1.0.
math.fabs(x)
Возвращает абсолютное значение x.
math.factorial(x)
Возвращает факториал x. Вызывает ValueError, если x не является целым числом или отрицательно.
math.floor(x)
Возвращает пол x, наибольшее целое число, меньшее или равное x. Если x – не число с плавающей запятой, передает управление x.__floor__(), которая должна вернуть целочисленное значение Integral.
math.fmod(x, y)
Возвращает 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() обычно предпочтительнее при работе с числами с плавающей запятой, а выражение Python x % y – при работе с целыми числами.
math.frexp(x)
Возвращает мантиссу и экспоненту x в виде пары (m, e). m – число с плавающей запятой, e – целое число, такие что x == m * 2**e точно. Если x равно нулю, возвращает (0.0, 0), иначе 0.5 <= abs(m) < 1. Используется для «разбора» внутреннего представления числа с плавающей запятой переносимым способом.
math.fsum(iterable)

Возвращает точную сумму чисел с плавающей запятой из итерируемого объекта. Избегает потери точности за счёт отслеживания нескольких промежуточных частичных сумм:

>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0

Точность алгоритма зависит от гарантий арифметики IEEE-754 и типичного случая, когда режим округления – «half-even». В некоторых сборках не под Windows базовая библиотека C использует сложение с расширенной точностью и может иногда дважды округлять промежуточную сумму, что приводит к ошибке в самом младшем значащем бите.

Для более подробного обсуждения и двух альтернативных подходов см. рецепты ASPN cookbook для точного суммирования чисел с плавающей запятой.

math.isinf(x)
Проверяет, является ли число с плавающей запятой x положительной или отрицательной бесконечностью.
math.isnan(x)
Проверяет, является ли число с плавающей запятой x значением NaN (не число). Для получения дополнительной информации о NaN см. стандарт IEEE 754.
math.ldexp(x, i)
Возвращает x * (2**i). Это, по сути, обратная функция к frexp().
math.modf(x)
Возвращает дробную и целую части x. Оба результата имеют тот же знак, что и x, и являются числами с плавающей запятой.
math.trunc(x)
Возвращает значение Real x, усечённое до типа Integral (обычно целого числа). Передает управление x.__trunc__().

Обратите внимание, что frexp() и modf() имеют другой шаблон вызова/возврата, чем их эквиваленты в C: они принимают один аргумент и возвращают пару значений, а не возвращают второе значение через «выходной параметр» (такого в Python нет).

Для функций ceil(), floor() и modf() обратите внимание, что все числа с плавающей запятой достаточно большой величины являются точными целыми числами. Числа с плавающей запятой Python обычно имеют не более 53 бит точности (как и тип double в C), и в этом случае любой float x с abs(x) >= 2**52 обязательно не имеет дробных битов.

9.2.2. Степенные и логарифмические функцииPower and logarithmic functions

math.exp(x)
Возвращает e**x.
math.log(x[, base])

С одним аргументом возвращает натуральный логарифм x (по основанию e).

С двумя аргументами возвращает логарифм x по заданному основанию, вычисляемый как log(x)/log(base).

math.log1p(x)
Возвращает натуральный логарифм 1+x (основание e). Результат вычисляется способом, точным для x вблизи нуля.
math.log10(x)
Возвращает десятичный логарифм x. Обычно это точнее, чем log(x, 10).
math.pow(x, y)
Возвращает x, возведённое в степень y. Особые случаи по возможности следуют Приложению ‘F’ стандарта C99. В частности, pow(1.0, x) и pow(x, 0.0) всегда возвращают 1.0, даже когда x – ноль или NaN. Если и x, и y конечны, x отрицательно, а y не является целым, то pow(x, y) не определён и вызывает ValueError.
math.sqrt(x)
Возвращает квадратный корень из x.

9.2.3. Тригонометрические функцииTrigonometric functions

math.acos(x)
Возвращает арккосинус x в радианах.
math.asin(x)
Возвращает арксинус x в радианах.
math.atan(x)
Возвращает арктангенс x в радианах.
math.atan2(y, x)
Возвращает atan(y / x), в радианах. Результат находится между -pi и pi. Вектор на плоскости от начала координат до точки (x, y) образует этот угол с положительной осью X. Смысл atan2() в том, что знаки обоих аргументов известны, поэтому она может вычислить правильный квадрант для угла. Например, atan(1) и atan2(1, 1) оба равны pi/4, но atan2(-1, -1) равно -3*pi/4.
math.cos(x)
Возвращает косинус x радиан.
math.hypot(x, y)
Возвращает евклидову норму, sqrt(x*x + y*y). Это длина вектора от начала координат до точки (x, y).
math.sin(x)
Возвращает синус x радиан.
math.tan(x)
Возвращает тангенс x радиан.

9.2.4. Преобразование угловAngular conversion

math.degrees(x)
Преобразует угол x из радианов в градусы.
math.radians(x)
Преобразует угол x из градусов в радианы.

9.2.5. Гиперболические функцииHyperbolic functions

math.acosh(x)
Возвращает обратный гиперболический косинус x.
math.asinh(x)
Возвращает обратный гиперболический синус x.
math.atanh(x)
Возвращает обратный гиперболический тангенс x.
math.cosh(x)
Возвращает гиперболический косинус x.
math.sinh(x)
Возвращает гиперболический синус x.
math.tanh(x)
Возвращает гиперболический тангенс x.

9.2.6. КонстантыConstants

math.pi
Математическая константа π = 3.141592... с точностью, доступной в системе.
math.e
Математическая константа e = 2.718281... с точностью, доступной в системе.

Особенность реализации CPython: Модуль math в основном состоит из тонких обёрток вокруг функций математической библиотеки C соответствующей платформы. Поведение в исключительных случаях следует приложению F стандарта C99, где это применимо. Текущая реализация возбуждает ValueError для некорректных операций, таких как sqrt(-1.0) или log(0.0) (где приложение F C99 рекомендует сигнализировать о недопустимой операции или делении на ноль), и OverflowError для результатов, которые приводят к переполнению (например, exp(1000.0)). NaN не будет возвращён ни одной из перечисленных функций выше, если только один или несколько входных аргументов не были NaN; в этом случае, большинство функций вернёт NaN, но (снова следуя приложению F C99) есть некоторые исключения из этого правила, например pow(float('nan'), 0.0) или hypot(float('nan'), float('inf')).

Обратите внимание, что Python не различает сигнальные NaN и тихие NaN, и поведение для сигнальных NaN остаётся неуточнённым. Обычное поведение – обрабатывать все NaN так, как будто они тихие.

См. также

Модуль cmath
Версии многих из этих функций для комплексных чисел.