math — Математические функции
Этот модуль предоставляет доступ к математическим функциям, определённым стандартом C.
Эти функции нельзя использовать с комплексными числами; используйте функции с таким же именем из модуля cmath, если вам требуется поддержка комплексных чисел. Различие между функциями, поддерживающими комплексные числа, и теми, которые этого не делают, сделано, так как большинство пользователей не хотят изучать столько математики, сколько требуется для понимания комплексных чисел. Получение исключения вместо комплексного результата позволяет раньше обнаружить неожиданное комплексное число, используемое в качестве параметра, чтобы программист смог определить, как и почему оно было сгенерировано в первую очередь.
Следующие функции предоставляются этим модулем. За исключением случаев, когда явно указано иное, все возвращаемые значения являются числами с плавающей точкой.
Теоретико-числовые и функции представления
-
math.ceil(x) -
Возвращает верхнюю границу x, наименьшее целое число, большее или равное x. Если x не является числом с плавающей точкой, делегирует к
x.__ceil__(), который должен вернуть значение типаIntegral.
-
math.comb(n, k) -
Возвращает число способов выбрать k элементов из n элементов без повторения и без порядка.
Вычисляется как
n! / (k! * (n - k)!)приk <= nи равно нулю приk > n.Также называется биномиальным коэффициентом, потому что он эквивалентен коэффициенту k-го члена в разложении многочлена выражения
(1 + x) ** n.Вызывает исключение
TypeError, если любой из аргументов не является целым числом. Вызывает исключениеValueError, если любой из аргументов отрицателен.Новая в версии 3.8.
-
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.__floor__(), который должен вернуть значение типаIntegral.
-
math.fmod(x, y) -
Возвращает
fmod(x, y), как определено библиотекой C платформы. Обратите внимание, что выражение Pythonx % yможет не возвращать тот же результат. Цель стандарта C заключается в том, чтоfmod(x, y)должно быть точно (математически; с бесконечной точностью) равноx - n*yдля некоторого целого n, такое, что результат имеет тот же знак, что и x, и величина меньшеabs(y). Python’sx % yвозвращает результат со знаком y вместо этого и может не быть точно вычислимым для аргументов с плавающей точкой. Например,fmod(-1e-100, 1e100)равно-1e-100, но результат Python’s-1e-100 % 1e100равен1e100-1e-100, который не может быть точно представлен как число с плавающей точкой, и округляется до неожиданного значения1e100. По этой причине функцияfmod()обычно предпочтительнее при работе с числами с плавающей точкой, а Python’sx % 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 и типичного случая, когда режим округления — получение ближайшего значения. На некоторых не-Windows системах, подлежащая библиотека C использует сложение с расширенной точностью и иногда может дважды округлить промежуточную сумму, что может вызвать небольшую ошибку в наименее значимом бите.
Для более подробного обсуждения и двух альтернативных подходов см. рецепты ASPN cookbook для точного суммирования чисел с плавающей точкой.
-
math.gcd(a, b) -
Возвращает наибольший общий делитель целых чисел a и b. Если a или b не равно нулю, то значение
gcd(a, b)— это наибольшее положительное целое число, которое делит как a, так и b.gcd(0, 0)возвращает0.Новая в версии 3.5.
-
math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) -
Возвращает
True, если значения a и b близки друг к другу, иFalseв противном случае.То, считаются ли два значения близкими, определяется заданными абсолютной и относительной допусками.
rel_tol — относительный допуск — это максимальное допустимое различие между a и b относительно большей абсолютной величины a или b. Например, для установки допуска в 5%, передайте
rel_tol=0.05. По умолчанию допуск равен1e-09, что гарантирует, что два значения совпадают с точностью до около 9 десятичных знаков. rel_tol должно быть больше нуля.abs_tol — минимальный абсолютный допуск — полезен для сравнений вблизи нуля. abs_tol должно быть не меньше нуля.
Если ошибок не произошло, результат будет:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol).Специальные значения IEEE 754
NaN,inf, и-infбудут обработаны в соответствии с правилами IEEE. В частности,NaNне считается близким ни к какому другому значению, включаяNaN.infи-infсчитаются близкими только к себе.Новая в версии 3.5.
См. также
PEP 485 — Функция для проверки приблизительного равенства
-
math.isfinite(x) -
Возвращает
Trueесли x не является бесконечностью и не является NaN, иFalseв противном случае. (Обратите внимание, что0.0является конечным).Новая в версии 3.2.
-
math.isinf(x) -
Возвращает
Trueесли x является положительной или отрицательной бесконечностью, иFalseв противном случае.
-
math.isnan(x) -
Возвращает
Trueесли x является NaN (не число), иFalseв противном случае.
-
math.isqrt(n) -
Возвращает целую квадратную корень неотрицательного целого числа n. Это целая часть точного квадратного корня n, или, эквивалентно, наибольшее целое число a такое, что a² ≤ n.
Для некоторых приложений может быть удобнее получить наименьшее целое число a такое, что n ≤ a², или, другими словами, верхнюю границу точного квадратного корня n. Для положительного n это можно вычислить, используя
a = 1 + isqrt(n - 1).Новая в версии 3.8.
-
math.ldexp(x, i) -
Возвращает
x * (2**i). Это по существу обратная функцияfrexp().
-
math.modf(x) -
Возвращает дробную и целую части x. Оба результата имеют знак x и являются числами с плавающей точкой.
-
math.perm(n, k=None) -
Возвращает число способов выбрать k элементов из n элементов без повторения и с порядком.
Вычисляется как
n! / (n - k)!приk <= nи равно нулю приk > n.Если k не указано или равно None, то k по умолчанию равно n, и функция возвращает
n!.Вызывает исключение
TypeError, если любой из аргументов не является целым числом. Вызывает исключениеValueError, если любой из аргументов отрицателен.Новая в версии 3.8.
-
math.prod(iterable, *, start=1) -
Вычисляет произведение всех элементов в входном итерируемом объекте. Значение по умолчанию для start в произведении —
1.Если итерируемый объект пуст, возвращает начальное значение. Эта функция предназначена специально для использования с числовыми значениями и может отклонять типы, которые не являются числовыми.
Новая в версии 3.8.
-
math.remainder(x, y) -
Возвращает остаток от деления x на y в стиле IEEE 754. Для конечных x и конечного ненулевого y, это разность
x - n*y, гдеn— ближайшее целое число к точному значению частногоx / y. Еслиx / yнаходится ровно посередине между двумя последовательными целыми числами, используется ближайшее чётное целое число дляn. Остатокr = remainder(x, y)таким образом всегда удовлетворяетabs(r) <= 0.5 * abs(y).Особые случаи следуют стандарту IEEE 754: в частности,
remainder(x, math.inf)равно x для любого конечного x, аremainder(x, 0)иremainder(math.inf, x)вызываютValueErrorдля любого не-NaN x. Если результат операции вычисления остатка равен нулю, этот ноль будет иметь тот же знак, что и x.На платформах, использующих двоичную плавающую точку IEEE 754, результат этой операции всегда точно представим: погрешность округления не вводится.
Добавлена в версии 3.7.
-
math.trunc(x) -
Возвращает значение
Realx, усечённое доIntegral(обычно целое число). Делегирует вызовx.__trunc__().
Обратите внимание, что frexp() и modf() имеют разную схему вызова/возврата по сравнению со своими аналогами на C: они принимают один аргумент и возвращают пару значений, а не возвращают своё второе значение через «параметр-результат» (такого понятия в Python нет).
Для функций ceil(), floor() и modf() обратите внимание, что все числа с плавающей точкой достаточно большой величины являются точными целыми числами. Числа с плавающей точкой Python обычно несут не более 53 бит точности (так же, как и платформа C double type), в этом случае любое число с плавающей точкой x с abs(x) >= 2**52 обязательно не имеет дробных битов.
Функции возведения в степень и логарифмические функции
-
math.exp(x) -
Возвращает e в степени x, где e = 2.718281… — основание натурального логарифма. Обычно это более точно, чем
math.e ** xилиpow(math.e, x).
-
math.expm1(x) -
Возвращает e в степени x, минус 1. Здесь e — основание натурального логарифма. Для малых чисел с плавающей точкой x, вычитание в
exp(x) - 1может привести к значительной потере точности; функцияexpm1()предоставляет способ вычисления этого значения с полной точностью:>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-05
Добавлена в версии 3.2.
-
math.log(x[, base]) -
С одним аргументом возвращает натуральный логарифм x (по основанию e).
С двумя аргументами возвращает логарифм x по заданному основанию base, вычисляемый как
log(x)/log(base).
-
math.log1p(x) -
Возвращает натуральный логарифм 1+x (по основанию e). Результат вычисляется таким образом, чтобы он был точным для x, близких к нулю.
-
math.log2(x) -
Возвращает двоичный логарифм x. Обычно это более точно, чем
log(x, 2).Добавлена в версии 3.3.
См. также
int.bit_length()возвращает количество битов, необходимых для представления целого числа в двоичном формате, не включая знак и ведущие нули.
-
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.pow()преобразует оба своих аргумента в типfloat. Используйте**или встроенную функциюpow()для вычисления точных целых степеней.
-
math.sqrt(x) -
Возвращает квадратный корень из x.
Тригонометрические функции
-
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.dist(p, q) -
Возвращает евклидово расстояние между двумя точками p и q, каждая задана как последовательность (или итерируемый объект) координат. Две точки должны иметь одинаковую размерность.
Приблизительно эквивалентно:
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
Добавлена в версии 3.8.
-
math.hypot(*coordinates) -
Возвращает евклидову норму,
sqrt(sum(x**2 for x in coordinates)). Это длина вектора от начала координат до точки, заданной координатами.Для двухмерной точки
(x, y), это эквивалентно вычислению гипотенузы прямоугольного треугольника с помощью теоремы Пифагора,sqrt(x*x + y*y).Изменено в версии 3.8: Добавлена поддержка n-мерных точек. Ранее поддерживался только двухмерный случай.
-
math.sin(x) -
Возвращает синус x радиан.
-
math.tan(x) -
Возвращает тангенс x радиан.
Преобразование углов
-
math.degrees(x) -
Преобразует угол x из радиан в градусы.
-
math.radians(x) -
Преобразует угол x из градусов в радианы.
Гиперболические функции
Гиперболические функции — аналоги тригонометрических функций, основанные на гиперболах вместо окружностей.
-
math.acosh(x) -
Возвращает обратную гиперболическую косинус x.
-
math.asinh(x) -
Возвращает обратную гиперболическую синус x.
-
math.atanh(x) -
Возвращает обратную гиперболическую тангенс x.
-
math.cosh(x) -
Возвращает гиперболическую косинус x.
-
math.sinh(x) -
Возвращает гиперболическую синус x.
-
math.tanh(x) -
Возвращает гиперболическую тангенс x.
Специальные функции
-
math.erf(x) -
Возвращает функцию ошибки в точке x.
Функция
erf()может использоваться для вычисления традиционных статистических функций, таких как кумулятивная стандартная нормальная функция распределения:def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0Новая в версии 3.2.
-
math.erfc(x) -
Возвращает дополнительную функцию ошибки в точке x. Дополнительная функция ошибки определяется как
1.0 - erf(x). Она используется для больших значений x, где вычитание из единицы может привести к потере значимости.Новая в версии 3.2.
-
math.gamma(x) -
Возвращает гамма-функцию в точке x.
Новая в версии 3.2.
-
math.lgamma(x) -
Возвращает натуральный логарифм абсолютного значения гамма-функции в точке x.
Новая в версии 3.2.
Константы
-
math.pi -
Математическая константа π = 3,141592…, с доступной точностью.
-
math.e -
Математическая константа e = 2,718281…, с доступной точностью.
-
math.tau -
Математическая константа τ = 6,283185…, с доступной точностью. Константа τ равна 2π, отношению окружности к радиусу круга. Чтобы узнать больше о τ, посмотрите видео Ви Харт Pi is (still) Wrong, и начните отмечать День τ, съев вдвое больше пирога!
Новая в версии 3.6.
-
math.inf -
Положительная бесконечность с плавающей запятой. (Для отрицательной бесконечности используйте
-math.inf.) Эквивалентно выводу отfloat('inf').Новая в версии 3.5.
-
math.nan -
Значение с плавающей запятой «не число» (NaN). Эквивалентно выводу от
float('nan').Новая в версии 3.5.
Детали реализации 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 как будто они были тихими.
См. также
-
Modulecmath -
Комплексные версии многих из этих функций.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/math.html