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

abs()

abs(x) возвращает абсолютное значение числа: отрицательное становится положительным, знак убирается — тип результата совпадает с типом аргумента.

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

Описание

abs(x) возвращает абсолютное значение числа: если число отрицательное — убирает минус, если положительное или равно нулю — оставляет как есть. Это удобно, когда нужна только величина разности или отклонения, а не его направление.

Синтаксис

Используйте следующую функцию для вычисления абсолютного значения x:

abs(x)

Параметры

x — число, абсолютное значение которого нужно найти. Может быть целым или числом с плавающей точкой.

Возвращает

Функция возвращает x, если x больше или равен нулю.

Функция возвращает -x, если x отрицательный.

Тип возвращаемого значения совпадает с типом аргумента.

Пример кода

Выводит абсолютное значение переменной x в Serial Monitor.

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;  // ожидание подключения serial порта. Нужно только для нативного USB порта
  }
  int x = 42;
  Serial.print("The absolute value of ");
  Serial.print(x);
  Serial.print(" is ");
  Serial.println(abs(x));
  x = -42;
  Serial.print("The absolute value of ");
  Serial.print(x);
  Serial.print(" is ");
  Serial.println(abs(x));
}

void loop() {
}

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

  • Измерение отклонения — когда нужно узнать, насколько показание датчика отличается от целевого значения, независимо от направления отклонения.
  • Пороговая проверка — сравнение abs(error) < threshold вместо двух отдельных условий error > -threshold && error < threshold.
  • Управление моторами — чтобы получить скорость без знака и отдельно управлять направлением вращения.
  • Фильтрация шума — игнорирование небольших колебаний сигнала вокруг нуля.

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

  • Не вкладывайте вызовы других функций внутрь abs(). Функция реализована как макрос, и такой код может вычислить аргумент несколько раз, что приведёт к непредсказуемому результату. Сначала сохраните результат в переменную, а затем передайте её в abs().
  • Тип результата определяется типом аргумента: abs(-3) вернёт int, abs(-3.5f) вернёт float. Следите за типами, чтобы не потерять дробную часть.
  • Если вы работаете с long, убедитесь, что передаёте значение типа long — иначе возможно переполнение при неявном приведении.
  • Для float и double функция работает корректно, включая граничные случаи вроде -0.0.
abs(a++); // избегайте этого — даёт неверные результаты

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

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