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

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

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