Namespaces
Variants

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

From ko.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