pow()
pow(base, exponent) возводит число в произвольную степень, включая дробную — например, pow(x, 0.5) даёт квадратный корень — и возвращает результат как double.
Полная статья
Описание
pow() вычисляет результат возведения числа в заданную степень. В отличие от простого умножения, эта функция поддерживает дробные показатели — например, pow(x, 0.5) даст квадратный корень из x. Это делает pow() удобным инструментом везде, где нужно нелинейное масштабирование: гамма-коррекция яркости светодиода, экспоненциальные кривые отклика датчика, расчёт мощности в физических формулах.
pow() работает с числами типа float и возвращает double. На большинстве плат Arduino float и double занимают одинаковые 4 байта, поэтому точность ограничена примерно 6–7 значащими цифрами.
Синтаксис
Используйте следующую функцию, чтобы возвести число в заданную степень:
pow(base, exponent)
Параметры
Функция допускает следующие параметры:
base— основание степени. Допустимый тип данных:float.exponent— показатель степени, в которую нужно возвестиbase. Допустимый тип данных:float.
Возвращает
Функция возвращает результат возведения в степень. Тип данных: double.
Пример кода
Вычислите значение x, возведенное в степень y:
float x = 2.0; // основание
float y = 10.0; // показатель степени
void setup() {
Serial.begin(9600);
double z = pow(x, y);
Serial.print("The power result is: ");
Serial.println(z);
}
void loop() {
}
Где применяется
- Плавное управление яркостью светодиода. Человеческий глаз воспринимает яркость логарифмически, поэтому линейное изменение ШИМ выглядит неравномерным.
pow()с показателем около 2–3 создаёт перцептивно ровную кривую. - Масштабирование показаний датчика. Если датчик имеет нелинейную характеристику, дробная степень позволяет выпрямить кривую без сложных таблиц.
- Физические расчёты. Формулы вроде закона Стефана–Больцмана или расчёта мощности требуют возведения в степень, часто нецелую.
- Генерация экспоненциальных последовательностей. Например, для построения логарифмической шкалы частот в аудиопроектах.
Практические замечания
pow()работает медленнее простого умножения. Если показатель — небольшое целое число (2, 3), быстрее написатьx * xилиx * x * x.- Передача отрицательного
baseс дробнымexponentдаётNaN(не-число). Проверяйте входные данные, еслиbaseможет оказаться отрицательным. pow(base, 0)всегда возвращает1.0, аpow(0, 0)— тоже1.0(стандартное математическое соглашение).- На платах с 8-битными AVR-микроконтроллерами (Uno, Nano, Mega)
doubleфактически равенfloat— 32 бита. Если нужна высокая точность, используйте платы на базе ARM или SAMD. - Результат
pow()удобно сразу передавать вround(),int()илиmap(), если дальше нужно целое значение — например, для записи в ШИМ-регистр.