math — Математические функции¶
Модуль предоставляет доступ к математическим функциям, определенным в стандартом C.
Эти функции нельзя использовать с комплексными числами; используйте функции с тем
же именем из модуля cmath, если требуется поддержка комплексных чисел.
Различие между функциями, которые поддерживают сложные числа, и теми, которые не
сделаны, поскольку большинство пользователей не хотят изучать столько
математики, сколько требуется для понимания комплексных чисел. Получение
исключения вместо сложного результата позволяет раньше обнаружить неожиданное
комплексное число используемый в качестве параметра, чтобы программист мог
определить, как и почему оно было сгенерировано в первую очередь.
За исключением случаев, когда явно указано иное, все возвращаемые значения являются плавающими.
Теоретико-числовые и репрезентативные функции¶
-
math.ceil(x)¶ Функция округляет число x до ближайшего целого в большую сторону. Если x не float, делегируется
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)¶ Возвращает модуль (абсолютное значение) float 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 не float, делегируется
x.__floor__(), который должен возвращать значениеIntegral.
-
math.fmod(x, y)¶ Возвращает
fmod(x, y), как определено библиотекой платформы C. Обратите внимание, что выражениеx % yPython не может возвращает тот же результат. Намерение стандарта C состоит в том, чтоfmod(x, y)точно (математически; к бесконечной точности), равняютсяx - n*yдля некоторого целочисленного n, таким образом, что у результата есть тот же знак как x и величина меньше, чемabs(y). Python’sx % yвозвращает результат со знаком y вместо него и может быть не совсем вычисляемым для аргументов float. Например,fmod(-1e-100, 1e100)есть-1e-100, но результат Python’s-1e-100 % 1e100есть1e100-1e-100, который не может быть представлен точно как float, и округляет до удивительного1e100. По этой причине функцияfmod()обычно предпочтительна при работе с поплавками, тогда как Python’sx % y- при работе с целыми числами.
-
math.frexp(x)¶ Возвращает мантиссу и степень x как пару
(m, e). m - float, а e - целое число, такое, чтоx == m * 2**eточно. Если x равно нулю, возвращает(0.0, 0), в противном случае0.5 <= abs(m) < 1. Это - используемый, чтобы «выбрать обособленно» внутреннее представление float портативным способом.
-
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 для точного суммирования с плавающей точкой.
-
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.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)¶ Вычислите произведение всех элементов в iterable ввода. start значение по умолчанию для продукта -
1.Когда повторяемое пусто, возвращает начало значение. Эта функция предназначена специально для использования с числовыми значения и может отклонять нечисловые типы.
Добавлено в версии 3.8.
-
math.remainder(x, y)¶ Возвращает остаток x в стиле IEEE 754 относительно y. Для конечных x и конечных ненулевых y это разность
x - n*y, гдеn- ближайшее целое число к точному значение частногоx / y. Еслиx / yточно промежуточный между двумя последовательными целыми числами, ближайшее целое число even - используемый для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)¶ Возвращает
Realзначение x, усеченный кIntegral(обычно целое число). Делегаты наx.__trunc__().
Обратите внимание, что frexp() и modf() имеют другой шаблон
call/возвращает, чем их C эквиваленты: они принимают один аргумент и
возвращает пару значения, а не возвращают свой второй возвращает
значение через «выходной параметр» (в Python такого нет).
Для ceil() floor() и функции modf(), отмечают, что числа с плавающей
запятой all достаточно большой величины - точные целые числа.
Python поплавки обычно несут не более 53 бит точности (такой же, как у
платформы C двойного типа), и в этом случае любой float 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 # дает результат с точностью до 11 мест 1.0000050000069649e-05 >>> expm1(1e-5) # результат с точностью до полной точности 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)¶ Возвращает логарифм пооснованию-2 x. Обычно это более точно, чем
log(x, 2).Добавлено в версии 3.3.
См.также
int.bit_length()возвращает число битов, необходимых, чтобы представлять целое число в наборе из двух предметов, исключая знак и ведущие ноли.
-
math.log10(x)¶ Возвращает логарифм основания-10 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): 'Накопительная функция распределения для стандартного нормального распределения' 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*π*, отношение окружности окружности к её радиусу. Чтобы узнать больше о тау, ознакомьтесь с видео Vi Hart Пи (все еще) ошибается, и начать праздновать День тау, съев вдвое больше пирога!
Добавлено в версии 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) (где C99 Приложение F рекомендует сигнализировать о
недопустимости операции или деления на ноль), и 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 - Комплексные числа версии многих из этих функций.
