Модуль math: функции и примеры применения

Раздел: Модули -> Библиотеки

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

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

import math

команды math python (команды модуля math в python)

После импорта становятся доступны такие константы, как math.pi (число π) и math.e (основание натурального логарифма). Основные функции включают арифметические, тригонометрические, логарифмические и специальные операции.

print(math.pi)   # 3.141592653589793
print(math.e)    # 2.718281828459045
print(math.sqrt(16))   # 4.0
print(math.sin(math.pi/2))  # 1.0

Aiogram python (создание бота на aiogram (асинхронный telegram бот))

Такой подход является наиболее прямым и эффективным для стандартных математических вычислений.

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

Для округления вниз применяется math.floor(x), а вверх - math.ceil(x). Встроенная функция round(x, n) выполняет банковское округление до n знаков после запятой.

import math

x = 3.7
print(math.floor(x))  # 3
print(math.ceil(x))   # 4
print(round(x, 0))    # 4.0 (но зависит от версии Python)

библиотека имен python (библиотека имен в python)

Выбор метода зависит от требований к округлению: floor и ceil всегда округляют в строгую сторону, round может давать неожиданные результаты для чисел, заканчивающихся на .5.

Типичная ошибка: попытка передать в math.floor строку или список. Функции модуля math ожидают числовые аргументы (int или float). Решение - предварительно преобразовать данные с помощью float() или int().

# Ошибка: math.floor('3.7') -> TypeError
# Корректно:
value = float('3.7')
print(math.floor(value))  # 3

Python pandas типы данных (типы данных pandas в python)

Как вычислить квадратный корень и степень?

Квадратный корень - math.sqrt(x). Возведение в степень - math.pow(x, y) или оператор ** x**y. Функция pow может быть удобнее для работы с модулем.

print(math.sqrt(25))     # 5.0
print(math.pow(2, 10))   # 1024.0
print(2**10)             # 1024
print(math.pow(16, 0.5)) # 4.0 (квадратный корень через степень)

Для вычисления гипотенузы по двум катетам используется math.hypot(x, y).

Ошибка: math.sqrt(-1) вызывает ValueError: math domain error. Для работы с комплексными числами необходим модуль cmath.

import cmath
print(cmath.sqrt(-1))  # 1j

Как использовать тригонометрические функции?

Все тригонометрические функции модуля math принимают и возвращают значения в радианах. Для преобразования между градусами и радианами служат math.radians(deg) и math.degrees(rad).

angle_deg = 45
angle_rad = math.radians(angle_deg)
print(math.sin(angle_rad))  # ~0.7071067811865475
print(math.cos(angle_rad))  # ~0.7071067811865476
print(math.tan(angle_rad))  # ~1.0

Доступны также обратные функции: math.asin, math.acos, math.atan и math.atan2(y, x).

Как вычислить логарифм и экспоненту?

Натуральный логарифм - math.log(x), логарифм по основанию b - math.log(x, b). Десятичный логарифм - math.log10(x), двоичный - math.log2(x). Экспонента - math.exp(x) (e^x).

print(math.log(10))      # 2.302585092994046
print(math.log(100, 10)) # 2.0
print(math.log10(100))   # 2.0
print(math.exp(2))       # 7.38905609893065

Ошибка: math.log(0) вызывает ValueError: math domain error. Аргумент должен быть положительным. Для x=0 результат стремится к минус бесконечности, но модуль math не умеет возвращать -inf? На самом деле math.log(0) даёт ValueError. Используйте float('-inf') при необходимости.

Как получить факториал и число сочетаний?

Факториал целого неотрицательного числа - math.factorial(n). Число сочетаний (биномиальный коэффициент) - math.comb(n, k) (доступно с Python 3.8).

print(math.factorial(5))  # 120
print(math.comb(10, 3))   # 120

Для перестановок используется math.perm(n, k).

Проблема: передача отрицательного числа в math.factorial приводит к ValueError. Только неотрицательные целые.

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

Расчёт площади круга через разные константы

Пример
import math

radius = 5
area = math.pi * math.pow(radius, 2)
print(f"Площадь круга радиусом {radius} равна {area:.2f}")
Площадь круга радиусом 5 равна 78.54

Моделирование синусоидального сигнала

Пример
import math

def sine_wave(amplitude, frequency, phase, duration, sample_rate=100):
    samples = []
    for i in range(int(duration * sample_rate)):
        t = i / sample_rate
        value = amplitude * math.sin(2 * math.pi * frequency * t + phase)
        samples.append(round(value, 3))
    return samples

signal = sine_wave(1, 5, 0, 0.2)
print(signal[:10])
[0.0, 0.309, 0.588, 0.809, 0.951, 1.0, 0.951, 0.809, 0.588, 0.309]

Нахождение корней квадратного уравнения с проверкой дискриминанта

Пример
import math

def quadratic_roots(a, b, c):
    d = b*b - 4*a*c
    if d < 0:
        return None, None  # комплексные корни не рассматриваем
    sqrt_d = math.sqrt(d)
    x1 = (-b + sqrt_d) / (2*a)
    x2 = (-b - sqrt_d) / (2*a)
    return x1, x2

print(quadratic_roots(1, -3, 2))  # (2.0, 1.0)
(2.0, 1.0)

Использование гиперболических функций для описания цепной линии

Пример
import math

# Координаты точки на цепной линии: y = a * cosh(x/a)
a = 2
x = 1.5
y = a * math.cosh(x / a)
print(f"При a={a}, x={x} -> y={y:.4f}")
При a=2, x=1.5 -> y=2.3249

Работа с бесконечностью и NaN

Пример
import math

# Проверка на бесконечность
print(math.isinf(float('inf')))      # True
print(math.isinf(1e300))             # False

# Проверка на NaN
nan_value = float('nan')
print(math.isnan(nan_value))         # True

# Константы бесконечности (но лучше использовать float)
print(math.inf)   # inf
print(math.nan)   # nan
True
False
True
inf
nan

Вычисление факториала больших чисел и сравнение с рекурсией

Пример
import math
import time

# Используем math.factorial
start = time.time()
result = math.factorial(100)
print(f"math.factorial: {time.time()-start:.6f} сек, длина результата {len(str(result))} цифр")

# Рекурсивный факториал (для сравнения)
def rec_fact(n):
    if n == 0:
        return 1
    return n * rec_fact(n-1)

start = time.time()
result2 = rec_fact(100)
print(f"Рекурсивный: {time.time()-start:.6f} сек, длина {len(str(result2))} цифр")
math.factorial: 0.000010 сек, длина результата 158 цифр
Рекурсивный: 0.000555 сек, длина 158 цифр

Вычисление НОД и НОК с помощью math.gcd и math.lcm

Пример
import math

a, b = 48, 18
print("НОД:", math.gcd(a, b))   # 6
print("НОК:", math.lcm(a, b))   # 144 (доступно с Python 3.9)
НОД: 6
НОК: 144

Команды модуля math в Python - comments

En
команды math python (python)