Python math: вычислительные возможности библиотеки

Раздел: Python -> Математические библиотеки

Основные возможности модуля math

Модуль math предоставляет эффективные реализации математических функций и констант, написанные на C. Для работы достаточно импортировать его:

import math

библиотека math python (библиотека math для python)

После этого доступны все функции. Этот способ является наиболее производительным для операций с числами с плавающей точкой (float) и охватывает тригонометрию, логарифмы, степени, округление, комбинаторику и другое.

import math
x = math.pi
y = math.sin(math.radians(30))
print(y)  # 0.5

Как вычислить синус угла, заданного в градусах?

Используется сочетание math.sin и math.radians (перевод градусов в радианы). Прямой передачи градусов нет – функция sin ожидает радианы.

import math
angle_deg = 45
rad = math.radians(angle_deg)
result = math.sin(rad)
print(result)  # ≈ 0.7071

Как округлить число вниз, вверх или отбросить дробную часть?

Для округления вниз (floor), вверх (ceil) и отбрасывания дробной части (trunc) используются одноимённые функции. Встроенная функция round выполняет банковское округление.

import math
x = 3.14159
print(math.floor(x))  # 3
print(math.ceil(x))   # 4
print(math.trunc(x))  # 3
print(round(x, 2))    # 3.14

Как вычислить факториал числа без рекурсии?

Готовая функция math.factorial работает быстро и безопасно для целых чисел (до переполнения памяти). Альтернатива – написать цикл, но это медленнее и менее надёжно.

import math
n = 10
print(math.factorial(n))  # 3628800

Как найти наибольший общий делитель (НОД) двух чисел?

Используйте math.gcd. Для третьего числа можно применить math.gcd рекурсивно или math.lcm (Python 3.9+) для наименьшего общего кратного.

import math
a, b = 48, 18
print(math.gcd(a, b))  # 6
print(math.lcm(a, b))  # 144

Как вычислить квадратный корень, избежав ошибки для отрицательных чисел?

math.sqrt выбрасывает ValueError при отрицательном аргументе. Для комплексных чисел используйте cmath.sqrt. Можно предварительно проверять знак.

import math
try:
    result = math.sqrt(-4)
except ValueError:
    result = None
    print("Ошибка: отрицательный аргумент")
# Для комплексных:
import cmath
print(cmath.sqrt(-4))  # 2j

Типичные ошибки:

  • DomainError при math.sqrt от отрицательного числа – следует использовать cmath или проверку.
  • Переполнение памяти при вычислении факториала очень большого числа (например, 106) – используйте приближённые методы или модуль decimal.
  • Неточность при сравнении чисел с плавающей точкой – применяйте math.isclose.
  • Путаница между радианами и градусами – всегда конвертируйте через math.radians/math.degrees.

Продвинутые примеры использования модуля math

Дополнительные функции, которые пригодятся в специфических задачах.

1. Сравнение чисел с плавающей точкой - math.isclose учитывает погрешности:

Пример
import math
a = 0.1 + 0.2
b = 0.3
print(a == b)  # False
print(math.isclose(a, b))  # True
False
True

2. Расстояние между точками - math.hypot (евклидова норма) и math.dist (Python 3.8+):

Пример
import math
p1 = (3, 4)
p2 = (0, 0)
print(math.hypot(*p1))  # 5.0
print(math.dist(p1, p2))  # 5.0
5.0
5.0

3. Комбинаторика - math.comb (число сочетаний) и math.perm (число размещений):

Пример
import math
n, k = 5, 2
print(math.comb(n, k))  # 10
print(math.perm(n, k))  # 20
10
20

4. Произведение элементов - math.prod (аналог sum для умножения):

Пример
import math
nums = [2, 3, 5]
print(math.prod(nums))  # 30
30

5. Остаток от деления по модулю IEEE 754 - math.remainder (не путать с %):

Пример
import math
x = 7.0; y = 3.0
print(math.remainder(x, y))  # 1.0 (остаток симметричный)
print(7 % 3)  # 1 (тоже)
1.0
1

6. Гамма-функция и функция ошибок - math.gamma и math.erf:

Пример
import math
print(math.gamma(5))  # 24.0 (факториал(4))
print(math.erf(1))    # ≈ 0.8427
24.0
0.8427007929497151

7. Битовое представление чисел - math.frexp (мантисса и экспонента) и math.ldexp (обратная операция):

Пример
import math
x = 12.5
m, e = math.frexp(x)  # 0.78125, 4
print(m, e)
print(math.ldexp(m, e))  # 12.5
0.78125 4
12.5

8. Работа со знаком - math.copysign копирует знак второго числа:

Пример
import math
print(math.copysign(5, -3))  # -5.0
-5.0

9. Проверка специальных значений - math.isfinite, math.isinf, math.isnan:

Пример
import math
inf = float('inf')
nan = float('nan')
print(math.isfinite(inf))  # False
print(math.isinf(nan))     # False
print(math.isnan(nan))     # True
False
False
True

Библиотека Math для Python - comments

En
библиотека math python (python)