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 이후)
(C++26부터 constexpr)
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 이후)
(C++26부터 constexpr)
long double powl ( long double base, long double exp ) ;
(4) (C++11 이후)
(C++26부터 constexpr)
추가 오버로드 (C++11 이후)
헤더 파일에 정의됨 <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

pow ( Arithmetic1 base, Arithmetic2 exp ) ;
(A) (C++26부터 constexpr)
1-4) base 의 값을 exp 제곱한 값을 계산합니다. 라이브러리는 모든 cv-unqualified 부동소수점 타입에 대해 매개변수 base exp 의 타입으로 std::pow 의 오버로드를 제공합니다. (C++23부터)
A) 산술 타입의 다른 모든 조합에 대해 추가적인 오버로드가 제공됩니다.
(since C++11)

목차

매개변수

base - 부동 소수점 또는 정수 값으로서의 밑
exp - 부동 소수점 또는 정수 값으로서의 지수

반환값

오류가 발생하지 않으면, base exp 제곱( base exp
)이 반환됩니다.

도메인 오류가 발생하면 구현에서 정의한 값이 반환됩니다(NaN을 지원하는 경우 해당 값).

극점 오류 또는 오버플로로 인한 범위 오류가 발생하는 경우, ±HUGE_VAL , ±HUGE_VALF , 또는 ±HUGE_VALL 가 반환됩니다.

언더플로우로 인해 범위 오류가 발생하면, 올바른 결과(반올림 후)가 반환됩니다.

오류 처리

오류는 math_errhandling 에 명시된 대로 보고됩니다.

만약 base 가 유한하고 음수이며 exp 가 유한하고 정수가 아닌 경우, 도메인 오류가 발생하며 범위 오류가 발생할 수 있습니다.

만약 base 가 0이고 exp 가 0이면, 도메인 오류가 발생할 수 있습니다.

만약 base 가 0이고 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 ) 는 모든 exp 에 대해 1을 반환하며, exp 가 NaN인 경우에도 마찬가지입니다.
  • pow ( base, ± 0 ) 는 모든 base 에 대해 1을 반환하며, base 가 NaN인 경우에도 마찬가지입니다.
  • pow ( base, exp ) base 가 유한하고 음수이며 exp 가 유한하고 비정수인 경우 NaN을 반환하고 FE_INVALID 를 발생시킵니다.
  • pow ( base, - ) 는 모든 |base| < 1 에 대해 +∞를 반환합니다.
  • pow ( base, - ) 는 모든 |base| > 1 에 대해 +0을 반환합니다.
  • pow ( base, + ) 는 모든 |base| < 1 에 대해 +0을 반환합니다.
  • pow ( base, + ) 는 모든 |base| > 1 에 대해 +∞를 반환합니다.
  • pow ( - ∞, exp ) exp 가 음의 홀수 정수인 경우 -0을 반환합니다.
  • pow ( - ∞, exp ) exp 가 음의 비정수 또는 음의 짝수 정수인 경우 +0을 반환합니다.
  • pow ( - ∞, exp ) exp 가 양의 홀수 정수인 경우 -∞를 반환합니다.
  • pow ( - ∞, exp ) exp 가 양의 비정수 또는 양의 짝수 정수인 경우 +∞를 반환합니다.
  • pow ( + ∞, exp ) 는 모든 음수 exp 에 대해 +0을 반환합니다.
  • pow ( + ∞, exp ) 는 모든 양수 exp 에 대해 +∞를 반환합니다.
  • 위에서 명시된 경우를 제외하고, 어떤 인수가 NaN이면 NaN이 반환됩니다.

참고 사항

C++98은 C의 pow() 위에 exp int 타입인 오버로드를 추가했으며, 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
(C++17부터)

(함수)
복소수 거듭제곱, 하나 또는 두 인수가 복소수일 수 있음
(함수 템플릿)
함수 std::pow 를 두 valarray에 또는 valarray와 값에 적용합니다
(함수 템플릿)
C 문서 를 참조하십시오 pow