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++; // используйте это вместо — выносите остальные вычисления за пределы функции