Namespaces
Variants

std:: pow, std:: powf, std:: powl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Определено в заголовке <cmath>
(1)
float pow ( float base, float exp ) ;

double pow ( double base, double exp ) ;

long double pow ( long double base, long double exp ) ;
(до C++23)
/* floating-point-type */

pow ( /* floating-point-type */ base,

/* floating-point-type */ exp )
(начиная с C++23)
(constexpr начиная с C++26)
float pow ( float base, int exp ) ;

double pow ( double base, int exp ) ;

long double pow ( long double base, int exp ) ;
(2) (до C++11)
float powf ( float base, float exp ) ;
(3) (начиная с C++11)
(constexpr начиная с C++26)
long double powl ( long double base, long double exp ) ;
(4) (начиная с C++11)
(constexpr начиная с C++26)
Определено в заголовке <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

pow ( Arithmetic1 base, Arithmetic2 exp ) ;
(A) (constexpr начиная с C++26)
1-4) Вычисляет значение base , возведённое в степень exp . Библиотека предоставляет перегрузки std::pow для всех cv-неквалифицированных типов с плавающей запятой в качестве типа параметров base и exp . (since C++23)
A) Для всех остальных комбинаций арифметических типов предоставлены дополнительные перегрузки.
(since C++11)

Содержание

Параметры

base - основание в виде значения с плавающей точкой или целого числа
exp - показатель степени в виде значения с плавающей точкой или целого числа

Возвращаемое значение

Если ошибок не возникает, base возводится в степень exp ( base exp
), и результат возвращается.

Если происходит ошибка области определения, возвращается значение, определяемое реализацией (NaN, если поддерживается).

Если возникает ошибка полюса или ошибка диапазона из-за переполнения, ±HUGE_VAL , ±HUGE_VALF , или ±HUGE_VALL возвращается.

Если происходит ошибка диапазона из-за потери значимости (underflow), возвращается корректный результат (после округления).

Обработка ошибок

Ошибки сообщаются, как указано в math_errhandling .

Если base является конечным и отрицательным, а exp является конечным и нецелым, возникает ошибка домена и может возникнуть ошибка диапазона.

Если base равен нулю и exp равен нулю, может произойти ошибка домена.

Если base равен нулю и exp отрицателен, может произойти ошибка домена или ошибка полюса.

Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559),

  • pow ( + 0 , exp ) , где exp — отрицательное целое нечётное число, возвращает +∞ и устанавливает FE_DIVBYZERO .
  • pow ( - 0 , exp ) , где exp — отрицательное целое нечётное число, возвращает -∞ и устанавливает FE_DIVBYZERO .
  • pow ( ± 0 , exp ) , где exp — отрицательное конечное чётное целое или нецелое число, возвращает +∞ и устанавливает FE_DIVBYZERO .
  • pow ( ± 0 , - ) возвращает +∞ и может установить FE_DIVBYZERO .
  • pow ( + 0 , exp ) , где exp — положительное целое нечётное число, возвращает +0.
  • pow ( - 0 , exp ) , где exp — положительное целое нечётное число, возвращает -0.
  • pow ( ± 0 , exp ) , где exp — положительное нецелое или положительное чётное целое число, возвращает +0.
  • pow ( - 1 , ±∞ ) возвращает 1.
  • pow ( + 1 , exp ) возвращает 1 для любого exp , даже если exp — NaN.
  • pow ( base, ± 0 ) возвращает 1 для любого base , даже если base — NaN.
  • pow ( base, exp ) возвращает NaN и устанавливает FE_INVALID , если base — конечное отрицательное число, а exp — конечное нецелое число.
  • pow ( base, - ) возвращает +∞ для любого |base| < 1 .
  • pow ( base, - ) возвращает +0 для любого |base| > 1 .
  • pow ( base, + ) возвращает +0 для любого |base| < 1 .
  • pow ( base, + ) возвращает +∞ для любого |base| > 1 .
  • pow ( - ∞, exp ) возвращает -0, если exp — отрицательное целое нечётное число.
  • pow ( - ∞, exp ) возвращает +0, если exp — отрицательное нецелое или отрицательное чётное целое число.
  • pow ( - ∞, exp ) возвращает -∞, если exp — положительное целое нечётное число.
  • pow ( - ∞, exp ) возвращает +∞, если exp — положительное нецелое или положительное чётное целое число.
  • pow ( + ∞, exp ) возвращает +0 для любого отрицательного exp .
  • pow ( + ∞, exp ) возвращает +∞ для любого положительного exp .
  • за исключением указанных выше случаев, если любой аргумент — NaN, возвращается NaN.

Примечания

В C++98 были добавлены перегрузки, где exp имеет тип int поверх C-функции pow() , и возвращаемый тип std :: pow ( float , int ) был float . Однако дополнительные перегрузки, введенные в C++11, указывают, что std :: pow ( float , int ) должен возвращать double . Проблема LWG 550 была поднята для решения этого конфликта, и решением стало удаление дополнительных перегрузок с int exp .

Хотя std::pow нельзя использовать для получения корня из отрицательного числа, std::cbrt предоставляется для частного случая, когда exp равен 1/3.

Дополнительные перегрузки не обязаны быть предоставлены в точности как (A) . Они лишь должны быть достаточными для обеспечения того, чтобы для их первого аргумента num1 и второго аргумента num2 :

  • Если num1 или num2 имеет тип long double , тогда std :: pow ( num1, num2 ) имеет тот же эффект, что и std :: pow ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • В противном случае, если num1 и/или num2 имеет тип double или целочисленный тип, тогда std :: pow ( num1, num2 ) имеет тот же эффект, что и std :: pow ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • В противном случае, если num1 или num2 имеет тип float , тогда std :: pow ( num1, num2 ) имеет тот же эффект, что и std :: pow ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(до C++23)

Если num1 и num2 имеют арифметические типы, тогда std :: pow ( num1, num2 ) имеет тот же эффект, что и std :: pow ( static_cast < /*common-floating-point-type*/ > ( num1 ) ,
static_cast < /*common-floating-point-type*/ > ( num2 ) )
, где /*common-floating-point-type*/ - это тип с плавающей точкой с наибольшим рангом преобразования с плавающей точкой и наибольшим подрангом преобразования с плавающей точкой между типами num1 и num2 , при этом аргументы целочисленного типа считаются имеющими тот же ранг преобразования с плавающей точкой, что и double .

Если такой тип с плавающей точкой с наибольшим рангом и подрангом не существует, тогда разрешение перегрузки не приводит к пригодному кандидату из предоставленных перегрузок.

(начиная с C++23)

Пример

#include <cerrno>
#include <cfenv>
#include <cmath>
#include <cstring>
#include <iostream>
// #pragma STDC FENV_ACCESS ON
int main()
{
    // типичное использование
    std::cout << "pow(2, 10) = " << std::pow(2, 10) << '\n'
              << "pow(2, 0.5) = " << std::pow(2, 0.5) << '\n'
              << "pow(-2, -3) = " << std::pow(-2, -3) << '\n';
    // специальные значения
    std::cout << "pow(-1, NAN) = " << std::pow(-1, NAN) << '\n'
              << "pow(+1, NAN) = " << std::pow(+1, NAN) << '\n'
              << "pow(INFINITY, 2) = " << std::pow(INFINITY, 2) << '\n'
              << "pow(INFINITY, -1) = " << std::pow(INFINITY, -1) << '\n';
    // обработка ошибок
    errno = 0;
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "pow(-1, 1/3) = " << std::pow(-1, 1.0 / 3) << '\n';
    if (errno == EDOM)
        std::cout << "    errno == EDOM " << std::strerror(errno) << '\n';
    if (std::fetestexcept(FE_INVALID))
        std::cout << "    FE_INVALID raised\n";
    std::feclearexcept(FE_ALL_EXCEPT);
    std::cout << "pow(-0, -3) = " << std::pow(-0.0, -3) << '\n';
    if (std::fetestexcept(FE_DIVBYZERO))
        std::cout << "    FE_DIVBYZERO raised\n";
}

Возможный вывод:

pow(2, 10) = 1024
pow(2, 0.5) = 1.41421
pow(-2, -3) = -0.125
pow(-1, NAN) = nan
pow(+1, NAN) = 1
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0
pow(-1, 1/3) = -nan
    errno == EDOM Numerical argument out of domain
    FE_INVALID raised
pow(-0, -3) = -inf
    FE_DIVBYZERO raised

Смотрите также

(C++11) (C++11)
вычисляет квадратный корень ( x )
(функция)
(C++11) (C++11) (C++11)
вычисляет кубический корень ( 3 x )
(функция)
(C++11) (C++11) (C++11)
вычисляет гипотенузу x 2
+y 2
и x 2
+y 2
+z 2
(since C++17)

(функция)
возведение в комплексную степень, один или оба аргумента могут быть комплексными числами
(шаблон функции)
применяет функцию std::pow к двум valarray или valarray и значению
(шаблон функции)