Главная chevron_right Функции chevron_right Математика chevron_right min()

min()

min(x, y) возвращает меньшее из двух чисел — удобно для ограничения верхнего предела переменной или выбора наименьшего из двух значений.

Полная статья

Описание

Функция min() принимает два числа и возвращает то, которое меньше. Это удобно, когда нужно убедиться, что значение не превышает заданный порог, или просто выбрать наименьшее из двух измерений, счётчиков или настроек.

Синтаксис

min(x, y)

Параметры

  • x — первое число для сравнения. Принимает любой числовой тип данных.
  • y — второе число для сравнения. Принимает любой числовой тип данных.

Возвращает

Меньшее из двух переданных значений. Тип результата совпадает с типом «победившего» аргумента.

Примеры

Найти меньшее из двух значений

Сравниваем a и b и выводим результат в Serial Monitor:

int a = 25;
int b = 14;

void setup() {
  Serial.begin(9600);

int smaller = min(a, b);

Serial.print("The smaller value is: ");
Serial.println(smaller);
}

void loop() {
}

Ограничить максимальное значение переменной

min() часто применяют, чтобы переменная не поднималась выше определённого предела. Если значение уже достигло потолка, функция вернёт именно этот потолок:

sensVal = min(sensVal, 100);  // присваивает sensVal меньшее из sensVal и 100
                              // гарантируя, что значение никогда не превысит 100.

Где применяется

  • Ограничение яркости или скорости — чтобы значение ШИМ или скорость мотора не превышали безопасный максимум.
  • Обработка показаний датчиков — выбор наименьшего из нескольких измерений, например расстояния от двух ультразвуковых датчиков.
  • Защита буфера — ограничение числа байт, которые можно записать, чтобы не выйти за границы массива.
  • Плавное управление — совместно с max() для удержания значения в нужном диапазоне (min() задаёт верхнюю границу, max() — нижнюю).

Практические замечания

  • На первый взгляд звучит парадоксально, но min() часто используют для ограничения верхнего предела переменной, а max() — для ограничения нижнего. Это следует из логики: min(value, MAX) гарантирует, что результат никогда не превысит MAX.
  • Не вызывайте другие функции прямо внутри скобок min(). Из-за особенностей реализации min() это может привести к неожиданным результатам. Лучше сначала вычислить значение в отдельную переменную, а затем передать её в min().
  • Функция работает с любым числовым типом: int, float, long и другими. Следите за тем, чтобы оба аргумента имели совместимые типы — иначе возможны неявные преобразования.
  • Если оба аргумента равны, функция вернёт любое из них (результат одинаков).
min(a++, 100);  // избегайте этого — даёт неверные результаты

min(a, 100);
a++;  // используйте это вместо — выносите остальные вычисления за пределы функции

Полезные материалы