Гид по технологиям

Использование класса Math в C# — основные функции и примеры

• 5 min read • Программирование • Обновлено 25 Nov 2025
Класс Math в C# — примеры и советы
Класс Math в C# — примеры и советы

Калькулятор и лист бумаги с математическими формулами

Класс Math в C# собирает часто используемые математические операции: сравнение (Min/Max), абсолютное значение, округление, тригонометрию, возведение в степень и извлечение корня. Для точности и производительности выбирайте подходящий тип (double, float, decimal) и методы (Math, MathF). В статье — примеры кода, распространённые ошибки и чеклисты для разработчиков и тестировщиков.

Основная идея

Класс Math — статический набор методов в .NET, который упрощает математические расчёты в приложениях: от форматирования чисел до вычислений в физических моделях. Он включает часто используемые функции и константы (например, Math.PI и Math.E).

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

Основной интент: использование класса Math в C#. Связанные варианты: Math C# примеры, Math.Round C#, Math.Sin Math.Cos C#, округление чисел C#, точность вычислений C#.

Основные функции Math

Ниже приведены привычные задачи и примеры использования. Код можно вставлять в консольное приложение, тесты или сервисы.

Поиск максимума и минимума

Math.Max() и Math.Min() принимают ровно два аргумента и возвращают соответственно большее или меньшее значение. Для коллекций — обход массива или LINQ.

Пример с двумя значениями:

int max = Math.Max(4, 7);
Console.WriteLine(max);  // output: 7

int min = Math.Min(4, 7);
Console.WriteLine(min);  // output: 4

Нахождение максимума в списке (ручной способ):

var arrayMaxNumbers = new List() { 3, 6, 1, 8, 4, 1 };
int maxNumber = arrayMaxNumbers[0];

foreach (var num in arrayMaxNumbers)
{
    maxNumber = Math.Max(maxNumber, num);
}

Console.WriteLine(maxNumber);  // output: 8

Примечание: для коллекций удобнее использовать LINQ: arrayMaxNumbers.Max().

Абсолютное значение

Math.Abs() возвращает расстояние числа от нуля (всегда неотрицательное значение).

int absoluteNum = Math.Abs(5);
Console.WriteLine(absoluteNum);  // output: 5

int absoluteNumNegative = Math.Abs(-5);
Console.WriteLine(absoluteNumNegative);  // output: 5

Важно: перегрузки метода поддерживают разные типы (int, long, float, double, decimal).

Округление и усечение

Math.Round() округляет число до указанного количества знаков после запятой. По умолчанию применяется «к ближайшему» правилу округления с учётом банковского округления; можно выбрать перегрузки с MidpointRounding для явного поведения.

double roundedDecimals = Math.Round(40.12345, 2);
Console.WriteLine(roundedDecimals);  // output: 40.12

double roundedNum = Math.Round(40.6);
Console.WriteLine(roundedNum);  // output: 41

Если нужен простой отбрасывающий вариант (без округления), используйте Math.Truncate():

double truncatedNum = Math.Truncate(4.5);
Console.WriteLine(truncatedNum);  // output: 4

Замечание: для денежных расчётов предпочтительнее decimal с явным управлением округлением.

Базовая тригонометрия

Методы Math.Sin, Math.Cos, Math.Tan принимают угол в радианах. Для работы с градусами выполните преобразование: radians = degrees * Math.PI / 180.

// синус 90° = 1
double sinAngle = (90 * Math.PI) / 180;
Console.WriteLine(Math.Sin(sinAngle));  // output: 1

// косинус 90° ~ 6.123e-17 (практически ноль, из-за ограничений представления типа double)
double cosAngle = (90 * Math.PI) / 180;
Console.WriteLine(Math.Cos(cosAngle));  // output: ~6.123e-17

// тангенс 30° ≈ 0.57735
double tanAngle = (30 * Math.PI) / 180;
Console.WriteLine(Math.Tan(tanAngle));  // output: ~0.57735

Совет: при сравнении результатов тригонометрических вычислений используйте погрешность (epsilon), например Math.Abs(a - b) < 1e-9.

Возведение в степень и корни

Math.Pow() и Math.Sqrt() используются для степеней и извлечения квадратного корня.

double powNum = Math.Pow(5, 3);
Console.WriteLine(powNum);  // output: 125

double sqrtNum = Math.Sqrt(16);
Console.WriteLine(sqrtNum);  // output: 4

Для целочисленных степеней и больших показателей имеет смысл проверять переполнение и производительность.

Частые ошибки и ограничения

  • Погрешность представления: double и float имеют конечную точность. Результат может быть не точно ноль, даже если математически он ноль.
  • Округление «банковское» в Math.Round по умолчанию (MidpointRounding.ToEven). Если нужно всегда округлять в большую сторону, используйте перегрузки с MidpointRounding.AwayFromZero.
  • Для денежных операций используйте decimal — он даёт десятичную точность, а не бинарную.
  • Math.Pow для целых степеней медленнее простого цикла или специализированных методов для небольших степеней.
  • Тригонометрические функции работают в радианах — частая причина ошибок при передаче градусов.

Альтернативы и расширения

  • MathF — набор функций для float (более быстрый, где важна скорость и меньшая точность).
  • System.Numerics — для векторных и матричных операций (в DSP/графике лучше использовать SIMD).
  • Специализированные библиотеки (Math.NET Numerics) для продвинутых статистических и линейных алгебраических задач.

Советы по производительности и точности

  • Выбирайте тип данных под задачу: float (экономия памяти, быстрее), double (общая точность), decimal (финансы).
  • Избегайте частых аллокаций и лишних вызовов Math.Pow в горячих путях; иногда быстрее написать специальную функцию для возведения в степень 2, 3 и т.д.
  • При сравнении чисел используйте относительную погрешность: Math.Abs(a - b) <= epsilon * Math.Max(1.0, Math.Abs(a), Math.Abs(b)).

Примеры тестов и критерии приёмки

Критерии приёмки (минимальные тесты):

  • Math.Max: на вход (4, 7) возвращает 7.
  • Math.Min: на вход (4, 7) возвращает 4.
  • Math.Abs: на вход (-5) возвращает 5.
  • Math.Round: 40.12345 с 2 знаками возвращает 40.12; проверка с MidpointRounding.
  • Math.Sin: синус 90° близок к 1 с точностью 1e-9.
  • Math.Sqrt: квадратный корень 16 — ровно 4.

Тестовые случаи для краёв:

  • Большие и малые числа (проверка переполнения и NaN).
  • Передача NaN и Infinity в функции — убедиться, что поведение соответствует ожиданиям.
  • Сравнение результатов тригонометрии с известными значениями с допуском.

Роль-ориентированные чеклисты

Для разработчика:

  • Выбрал корректный тип (float/double/decimal).
  • Использует MathF при необходимости уменьшить накладные расходы.
  • Добавил тесты с учётом погрешности.

Для код-ревьюера:

  • Проверил, что градусы преобразуются в радианы перед использованием тригонометрии.
  • Проверил поведение при крайних значениях (NaN, Infinity).

Для тестировщика:

  • Создал тесты на точность с явно заданным эпсилон.
  • Проверил поведение при отрицательных и нулевых входах.

Краткий глоссарий

  • double: 64-битное число с плавающей точкой.
  • float: 32-битное число с плавающей точкой.
  • decimal: 128-битный десятичный тип для финансовых расчётов.
  • радианы: угол, измеряемый в радианах (2π = 360°).

Когда Math может не подойти

  • Требуется сверхвысокая производительность и контроль над SIMD — используйте System.Numerics или специализированные оптимизации.
  • Для статистики и продвинутых алгоритмов — библиотеки математического профиля (Math.NET, Accord.NET).
  • Для точных денежных расчётов с банковскими правилами округления — decimal и явные правила округления.

Итог

Класс Math в C# — надёжный и удобный инструмент для типичных математических операций. Он покрывает широкий набор задач, но важно выбирать правильный тип данных, учитывать точность и производительность. Для более сложных задач рассмотрите MathF, System.Numerics или внешние библиотеки.

Важное: тестируйте погрешности и крайние сценарии, особенно при работе с плавающей точкой.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро