pow в C++: возведение в степень с примерами
Всем привет! В данной статье речь пойдет о функции pow в C++. Данная функция позволяет возвести в степень нужное нам число. Сначала мы рассмотрим pow из заголовочного файла <cmath>, после чего сравним ее с другими похожими функциями powf и powl. И в конце мы рассмотрим ошибки, которые могут возникнуть при работе с данной функцией.
Как возвести число в степень в C++
Для возведения числа в степень в C++ есть функция pow. Данная функция доступна при подключении <cmath> (данный файл также объявляет такие функции как log, fabs и exp).
По своей сути функция pow эквивалентна следующей формуле: pow(base, exponent) = baseexponent
Данная функция объявлена следующим образом:
double pow (double base, double exponent);Из данной сигнатуры видно, что:
- первым аргументом функция
powпринимает основание, которое будем возводить в степень; - вторым аргументом нужно передать степень, в которую нужно возвести основание;
- результат данной функции (основание возведенное в степень) имеет тип
double.
Теперь давайте попробуем вызвать данную функцию с разными параметрами, чтобы лучше понять, как она работает:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout << "pow(2, 3) = " << pow(2, 3) << endl;
cout << "pow(3, 2) = " << pow(3, 2) << endl;
cout << "pow(4, 1) = " << pow(4, 1) << endl;
return 0;
}Вывод данной программы:
pow(2, 3) = 8
pow(3, 2) = 9
pow(4, 1) = 4Теперь давайте попробуем передать данной функции вещественные числа, начав с дробного основания:
cout << "pow(1.5, 2) = " << pow(1.5, 2) << endl;
cout << "pow(0.5, 2) = " << pow(0.5, 2) << endl;Вывод:
pow(1.5, 2) = 2.25
pow(0.5, 2) = 0.25Как вы видите, pow позволяет нам работать с дробными основаниями так же, как и с целыми. Теперь давайте попробуем возвести в дробную степень:
cout << "pow(16, 0.3) = " << pow(16, 0.3) << endl;
cout << "pow(16, 0.5) = " << pow(16, 0.5) << endl;
cout << "pow(16, 1.5) = " << pow(16, 1.5) << endl;
cout << "pow(16, 2.5) = " << pow(16, 2.5) << endl;Вывод:
pow(16, 0.3) = 2.2974
pow(16, 0.5) = 4
pow(16, 1.5) = 64
pow(16, 2.5) = 1024Как видите, pow без проблем позволяет нам использовать дробные числа в качестве степени.
Поскольку корень числа эквивалентен возведению в степень
0.5, мы можем использовать функциюpowвместоsqrt. Однако стоит отметить, что функцияsqrtбудет предпочтительнее в данном случае. Подробнее о возведении в степень можете почитать в википедии.
Какой будет результат выполнения следующего кода:
cout << pow(4, 0.5) << ", " << pow(9, 1.5) << endl;powl: возведение long double в степень
powl является эквивалентом функции pow только для чисел типа long double. В остальном, данная функция работает точно так же: принимает base и exponent, а возвращает результат возведения в степень:
long double result = powl(123.456, 789);
cout << "result = " << result << endl;Вывод:
result = 1.59635e+1650powf: возведение float в степень
powf - это еще один аналог функции pow. powf работает только с числами типа float:
float result = powf(123.456, 789);
cout << "result = " << result << endl;Вывод:
result = infТип float имеет меньший диапазон значений по сравнению с double. В данном случае результат возведения в степень оказался слишком большим для float, поэтому мы видим inf в результате.
nan при работе с pow, powf, powl
Если основание отрицательно, а степень является дробным числом, то функция pow вернет nan:
cout << pow(-4, 0.5); // nanОднако данное правило не работает если основанием является -INFINITY. В случае с минус бесконечностью, pow вернет +INFINITY:
cout << pow(-INFINITY, 0.5); // infТакже возможны ошибки при использовании определенных реал изаций функции pow (зависит от выбранного вами компилятора):
- при возведении 0 в степень 0;
- при возведении 0 в отрицательную степень.
Упражнения
-
Исследование функции
pow:- Напишите программу на C++, которая использует функцию
powдля возведения различных оснований и степеней введенных пользователем. - Программа должна показать результат возведения в степень.
- Напишите программу на C++, которая использует функцию
-
Сравнение функций
pow,powlиpowf:- Создайте три программы, каждая из которых использует одну из трех функций (
pow,powlилиpowf) для возведения больших чисел в степень. - Сравните результаты и проанализируйте различия, особенно в случае с
powf.
- Создайте три программы, каждая из которых использует одну из трех функций (
-
Работа с
nanиinf:- Напишите программу, которая демонстрирует результаты, когда функции
pow,powfиpowlвозвращаютnanилиinf.
- Напишите программу, которая демонстрирует результаты, когда функции
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение