math — Mathematical functions


Цей модуль забезпечує доступ до математичних функцій, визначених стандартом C.

Ці функції не можна використовувати з комплексними числами; використовуйте однойменні функції з модуля cmath, якщо вам потрібна підтримка комплексних чисел. Розрізнення між функціями, які підтримують комплексні числа, і тими, які не підтримують, зроблено, оскільки більшість користувачів не хочуть вивчати стільки математики, скільки потрібно для розуміння комплексних чисел. Отримання винятку замість комплексного результату дозволяє раніше виявити неочікуване комплексне число, яке використовується як параметр, щоб програміст міг визначити, як і чому воно взагалі було згенероване.

Цей модуль забезпечує такі функції. За винятком випадків, коли явно зазначено інше, усі повернуті значення є числами з плаваючою точкою.

Теоретико-числові функції та функції представлення

math.ceil(x)

Повертає максимальне значення x, найменше ціле число, більше або рівне x. Якщо x не є числом з плаваючою точкою, делегує x.__ceil__, який має повернути значення Integral.

math.comb(n, k)

Повертає кількість способів вибору k елементів з n елементів без повторення та без порядку.

Оцінюється як n! / (k! * (n - k)!) коли k <= n and evaluates to zero when k > n.

Also called the binomial coefficient because it is equivalent to the coefficient of k-th term in polynomial expansion of the expression (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)

Return x factorial as an integer. Raises ValueError if x is not integral or is negative.

Застаріло починаючи з версії 3.9: Accepting floats with integral values (like 5.0) is deprecated.

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). x % y Python замість цього повертає результат зі знаком y і може бути неточно обчислюваним для аргументів з плаваючою точкою. Наприклад, fmod(-1e-100, 1e100) є -1e-100, але результатом -1e-100 % 1e100 Python є 1e100-1e-100, який не може бути точно представлений як число з плаваючою точкою, і округлюється до несподіваного 1e100. З цієї причини функція fmod() зазвичай є кращою під час роботи з числами з плаваючою точкою, тоді як x % y Python є кращою під час роботи з цілими числами.

math.frexp(x)

Повертає мантису та експонент x як пару (m, e). m є числом з плаваючою точкою, а e є цілим числом таким чином, що x == m * 2**e точно. Якщо x дорівнює нулю, повертає (0,0, 0), інакше 0,5 <= abs(m) < 1. Це використовується, щоб «розібрати» внутрішнє представлення float переносним способом.

math.fsum(iterable)

Return an accurate floating point sum of values in the iterable. Avoids loss of precision by tracking multiple intermediate partial sums:

>>> 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 використовує розширену точність додавання та іноді може подвоїти округлення проміжної суми, спричиняючи її вимкнення у своєму молодшому розряді.

For further discussion and two alternative approaches, see the ASPN cookbook recipes for accurate floating point summation.

math.gcd(*integers)

Повертає найбільший спільний дільник указаних цілих аргументів. Якщо будь-який з аргументів не дорівнює нулю, то повернуте значення є найбільшим натуральним числом, яке є дільником усіх аргументів. Якщо всі аргументи дорівнюють нулю, то повертається значення 0. gcd() без аргументів повертає 0.

Нове в версії 3.5.

Змінено в версії 3.9: Додано підтримку довільної кількості аргументів. Раніше підтримувалися лише два аргументи.

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.lcm(*integers)

Повертає найменше спільне кратне вказаних цілих аргументів. Якщо всі аргументи відмінні від нуля, тоді повертається найменше натуральне число, кратне всім аргументам. Якщо будь-який з аргументів дорівнює нулю, то повертається значення 0. lcm() без аргументів повертає 1.

Нове в версії 3.9.

math.ldexp(x, i)

Повернути x * (2**i). По суті, це зворотна функція frexp().

math.modf(x)

Повертає дробову та цілу частини x. Обидва результати мають знак x і є числами з плаваючою точкою.

math.nextafter(x, y)

Return the next floating-point value after x towards y.

If x is equal to y, return y.

приклади:

  • math.nextafter(x, math.inf) йде вгору: до позитивної нескінченності.

  • math.nextafter(x, -math.inf) йде вниз: до мінус нескінченності.

  • math.nextafter(x, 0.0) рухається до нуля.

  • math.nextafter(x, math.copysign(math.inf, x)) відходить від нуля.

Дивіться також math.ulp().

Нове в версії 3.9.

math.perm(n, k=None)

Повернути кількість способів вибору k елементів з n елементів без повторення та з порядком.

Оцінюється як n! / (n - k)! коли k <= n and evaluates to zero when k > n.

If k is not specified or is None, then k defaults to n and the function returns n!.

Викликає TypeError, якщо один із аргументів не є цілим числом. Викликає ValueError, якщо будь-який з аргументів негативний.

Нове в версії 3.8.

math.prod(iterable, *, start=1)

Обчислити добуток усіх елементів у вхідному iterable. Типовим початковим значенням для продукту є «1».

Коли iterable порожній, поверніть початкове значення. Ця функція призначена спеціально для використання з числовими значеннями та може відхиляти нечислові типи.

Нове в версії 3.8.

math.remainder(x, y)

Повертає залишок x у стилі IEEE 754 відносно y. Для кінцевого x і кінцевого ненульового y це різниця x - n*y, де n є найближчим цілим числом до точного значення частки x / y . Якщо x / y знаходиться точно посередині між двома послідовними цілими числами, для n використовується найближче парне ціле число. Таким чином, залишок r = залишок(x, y) завжди задовольняє abs(r) <= 0,5 * abs(y).

Спеціальні випадки відповідають стандарту IEEE 754: зокрема, remainder(x, math.inf) є x для будь-якого кінцевого x, а remainder(x, 0) і remainder(math.inf). inf, x) підняти ValueError для будь-якого не-NaN x. Якщо результатом операції залишку є нуль, цей нуль матиме той самий знак, що й x.

On platforms using IEEE 754 binary floating-point, the result of this operation is always exactly representable: no rounding error is introduced.

Нове в версії 3.7.

math.trunc(x)

Поверніть x із видаленням дробової частини, залишаючи цілу частину. Це округляє до 0: trunc() еквівалентно floor() для додатного x та еквівалентно ceil() для від’ємного x. Якщо x не є числом з плаваючою точкою, делегує x.__trunc__, який має повернути значення Integral.

math.ulp(x)

Повертає значення молодшого біта числа з плаваючою точкою x:

  • Якщо x є NaN (а не числом), поверніть x.

  • Якщо x від’ємне, поверніть ulp(-x).

  • Якщо x є позитивною нескінченністю, поверніть x.

  • Якщо x дорівнює нулю, поверніть найменше додатне деноралізоване число з плаваючою точкою (менше ніж мінімальне позитивне нормалізоване число з плаваючою точкою, sys.float_info.min).

  • Якщо x дорівнює найбільшому додатному репрезентативному float, поверніть значення молодшого значущого біта x, щоб перше число з плаваючою точкою, менше за x, було x - ulp(x).

  • В іншому випадку (x — додатне скінченне число) поверніть значення молодшого біта x, щоб перше число з плаваючою речовиною, більше за x, було x + ulp(x).

ULP розшифровується як «Unit in the Last Place».

Дивіться також math.nextafter() і sys.float_info.epsilon.

Нове в версії 3.9.

Зауважте, що frexp() і modf() мають інший шаблон виклику/повернення, ніж їхні еквіваленти на C: вони беруть один аргумент і повертають пару значень, замість того, щоб повертати друге значення, що повертається через „вихід параметр» (у Python такого немає).

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

Степеневі та логарифмічні функції

math.exp(x)

Поверніть e у степені x, де e = 2,718281… є основою натуральних логарифмів. Зазвичай це точніше, ніж math.e ** x або pow(math.e, x).

math.expm1(x)

Return e raised to the power x, minus 1. Here e is the base of natural logarithms. For small floats x, the subtraction in exp(x) - 1 can result in a significant loss of precision; the expm1() function provides a way to compute this quantity to full precision:

>>> 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 до заданої основи, обчислений як log(x)/log(основа).

math.log1p(x)

Повертає натуральний логарифм 1+x (за основою e). Результат обчислюється таким чином, що є точним для x біля нуля.

math.log2(x)

Повертає логарифм x за основою 2. Зазвичай це точніше, ніж log(x, 2).

Нове в версії 3.3.

Дивись також

int.bit_length() повертає кількість бітів, необхідну для представлення цілого числа в двійковій формі, за винятком знака та нулів на початку.

math.log10(x)

Повертає логарифм x за основою 10. Зазвичай це точніше, ніж log(x, 10).

math.pow(x, y)

Return x raised to the power y. Exceptional cases follow Annex „F“ of the C99 standard as far as possible. In particular, pow(1.0, x) and pow(x, 0.0) always return 1.0, even when x is a zero or a NaN. If both x and y are finite, x is negative, and y is not an integer then pow(x, y) is undefined, and raises ValueError.

На відміну від вбудованого оператора **, math.pow() перетворює обидва свої аргументи на тип float. Використовуйте ** або вбудовану функцію pow() для обчислення точних цілих степенів.

math.sqrt(x)

Повертає квадратний корінь з x.

Тригонометричні функції

math.acos(x)

Повертає арккосинус x у радіанах. Результат між 0 і pi.

math.asin(x)

Повертає арксинус x у радіанах. Результат знаходиться між -pi/2 і pi/2.

math.atan(x)

Повертає арктангенс x у радіанах. Результат знаходиться між -pi/2 і pi/2.

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 для x у координатах)). Це довжина вектора від початку координат до точки, заданої координатами.

Для двовимірної точки (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 із градусів у радіани.

Гіперболічні функції

Hyperbolic functions are analogs of trigonometric functions that are based on hyperbolas instead of circles.

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.

The erf() function can be used to compute traditional statistical functions such as the cumulative standard normal distribution:

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… з доступною точністю. Tau — постійна величина кола, що дорівнює 2π, відношенню довжини кола до його радіуса. Щоб дізнатися більше про Тау, перегляньте відео Ві Харт Пі (все ще) неправильне, і почніть святкувати День Тау, з’ївши вдвічі більше пирога!

Нове в версії 3.6.

math.inf

Додатна нескінченність із плаваючою комою. (Для негативної нескінченності використовуйте -math.inf.) Еквівалент виведення float('inf').

Нове в версії 3.5.

math.nan

A floating-point «not a number» (NaN) value. Equivalent to the output of float('nan'). Due to the requirements of the IEEE-754 standard, math.nan and float('nan') are not considered to equal to any other numeric value, including themselves. To check whether a number is a NaN, use the isnan() function to test for NaNs instead of is or ==. Example:

>>> import math
>>> math.nan == math.nan
False
>>> float('nan') == float('nan')
False
>>> math.isnan(math.nan)
True
>>> math.isnan(float('nan'))
True

Нове в версії 3.5.

CPython implementation detail: Модуль 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

Версії комплексних чисел багатьох із цих функцій.