max()
max() возвращает большее из двух чисел — удобно задавать нижнюю границу диапазона: max(x, нижняя_граница) не даст значению уйти ниже допустимого минимума.
Полная статья
Описание
max() — простая математическая утилита: она принимает два числа и возвращает то, которое больше. Чаще всего её используют не для прямого сравнения, а для защиты переменной от ухода ниже допустимого минимума — это удобный способ задать нижнюю границу диапазона прямо в одной строке кода.
Синтаксис
max(x, y)
Параметры
x— первое сравниваемое число. Допустим любой числовой тип данных.y— второе сравниваемое число. Допустим любой числовой тип данных.
Возвращает
Большее из двух переданных значений. Тип результата соответствует типу большего аргумента.
Примеры
Найти большее из двух переменных
Сравниваем a и b и выводим результат в Serial Monitor:
int a = 25;
int b = 14;
void setup() {
Serial.begin(9600);
int larger = max(a, b);
Serial.print("The larger value is: ");
Serial.println(larger);
}
void loop() {
}
Ограничить минимальное значение переменной
Если нужно, чтобы переменная никогда не опускалась ниже определённого порога, max() справляется с этим в одну строку:
sensVal = max(sensVal, 20); // присваивает sensVal большее из sensVal и 20
// (гарантируя, что значение будет не меньше 20)
Это типичный приём при работе с сенсорами, ШИМ или любыми вычислениями, где отрицательный или слишком маленький результат недопустим.
Где применяется
- Ограничение минимальной скорости мотора — чтобы мотор не получал значение ниже порога старта.
- Фильтрация показаний сенсора — обрезать шумовые выбросы в сторону нуля.
- Расчёт задержек — гарантировать, что пауза не окажется меньше безопасного минимума.
- Управление яркостью светодиода — не давать значению ШИМ уходить ниже видимого порога.
Практические замечания
- Несмотря на название,
max()парадоксально чаще применяют для задания нижней границы диапазона, аmin()— для верхней. Это легко запутывает новичков: запомните, чтоmax(x, нижняя_граница)не даётxупасть ниженижней_границы. - Не вкладывайте вызовы других функций внутрь аргументов
max(). Из-за особенностей реализации (макрос препроцессора) это может привести к тому, что вложенная функция выполнится несколько раз или результат окажется неверным. Вычислите значения заранее в отдельных переменных, а затем передайте их вmax(). - Функция работает с любым числовым типом:
int,float,longи другими. Следите за совместимостью типов аргументов — смешиваниеintиfloatможет дать неожиданный результат из-за неявного приведения типов. - Для одновременного ограничения и снизу, и сверху удобно комбинировать
max()иmin():min(max(x, нижняя), верхняя)— классический способ «зажать» значение в диапазон.
Примечания и предупреждения
max() часто используется в паре с min(). Помните о потенциальных проблемах при использовании функций внутри аргументов:
max(a--, 0); // избегайте этого — даёт неверный результат
// используйте вместо этого:
max(a, 0);
a--; // выносите остальные вычисления за пределы функции