pow в C++: возведение в степень с примерами

Всем привет! В данной статье речь пойдет о функции pow в C++. Данная функция позволяет возвести в степень нужное нам число. Сначала мы рассмотрим pow из заголовочного файла <cmath>, после чего сравним ее с другими похожими функциями powf и powl. И в конце мы рассмотрим ошибки, которые могут возникнуть при работе с данной функцией.

Иллюстрация функции pow

Как возвести число в степень в 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;
2, 27
2, 81
16, 729
16, 27

powl: возведение long double в степень

powl является эквивалентом функции pow только для чисел типа long double. В остальном, данная функция работает точно так же: принимает base и exponent, а возвращает результат возведения в степень:

long double result = powl(123.456, 789);
cout << "result = " << result << endl;

Вывод:

result = 1.59635e+1650

powf: возведение 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 в отрицательную степень.

Упражнения

  1. Исследование функции pow:

    • Напишите программу на C++, которая использует функцию pow для возведения различных оснований и степеней введенных пользователем.
    • Программа должна показать результат возведения в степень.
  2. Сравнение функций pow, powl и powf:

    • Создайте три программы, каждая из которых использует одну из трех функций (pow, powl или powf) для возведения больших чисел в степень.
    • Сравните результаты и проанализируйте различия, особенно в случае с powf.
  3. Работа с nan и inf:

    • Напишите программу, которая демонстрирует результаты, когда функции pow, powf и powl возвращают nan или inf.

Обсуждение