math_pow

math_pow (거듭제곱)

std::pow는 base를 거듭제곱 exp로 올린 값을 계산하는 함수예요. 즉 base^exp를 반환해요.

출처: cppreference

본문

<cmath> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.

float       pow ( float base, float exp );
double      pow ( double base, double exp );
long double pow ( long double base, long double exp );

(1) (until C++23)

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

(since C++23) (constexpr since C++26)

float       pow ( float base, int exp );
double      pow ( double base, int exp );
long double pow ( long double base, int exp );

(2) (until C++11)

float       powf( float base, float exp );

(3) (since C++11) (constexpr since C++26)

long double powl( long double base, long double exp );

(4) (since C++11) (constexpr since C++26)

추가 오버로드 (since C++11): <cmath> 헤더에 정의돼요.

template< class Arithmetic1, class Arithmetic2 >
/* common-floating-point-type */
            pow ( Arithmetic1 base, Arithmetic2 exp );

(A) (constexpr since C++26)

  • 1-4) base를 거듭제곱 exp로 올린 값을 계산해요. 라이브러리는 매개변수 base와 exp의 타입으로 모든 cv 한정되지 않은 부동소수점 타입에 대한 std::pow 오버로드를 제공해요. (C++23부터)
  • A) 산술 타입의 다른 모든 조합에 대해 추가 오버로드가 제공돼요.

(C++11부터)

매개변수 (Parameters)

  • base — 부동소수점 또는 정수 값의 밑
  • exp — 부동소수점 또는 정수 값의 지수

반환값 (Return value)

오류가 없다면 base를 exp로 올린 값(base^exp)을 반환해요.

도메인 오류가 발생하면 구현 정의 값을 반환해요 (NaN 지원 시 NaN).

극 오류 또는 오버플로로 인한 범위 오류가 발생하면 ±HUGE_VAL, ±HUGE_VALF, 또는 ±HUGE_VALL을 반환해요.

언더플로로 인한 범위 오류가 발생하면 (반올림 후의) 올바른 결과를 반환해요.

오류 처리 (Error handling)

오류는 math_errhandling에 지정된 대로 보고돼요.

base가 유한하고 음수이고 exp가 유한하고 정수가 아니면 도메인 오류가 발생하고 범위 오류가 발생할 수 있어요.

base가 0이고 exp가 0이면 도메인 오류가 발생할 수 있어요.

base가 0이고 exp가 음수이면 극 오류가 발생할 수 있어요.

구현이 IEEE 부동소수점 연산(IEC 60559)을 지원한다면:

  • base가 ±0이고 exp가 양의 홀수 정수이면 결과는 ±0이에요.
  • base가 ±0이고 exp가 양의 짝수 정수이면 결과는 +0이에요.
  • base가 +1이면 (exp가 NaN이어도) 결과는 +1이에요.
  • base가 NaN이면 결과는 NaN이에요.
  • exp가 ±0이면 (base가 NaN이어도) 결과는 +1이에요.

참고 (Notes)

IEEE 호환 타입 double의 경우 std::pow(0.0, negative)는 +∞를 주고 FE_DIVBYZERO를 발생시킬 수 있어요.

추가 오버로드는 정확히 (A) 형태로 제공될 필요는 없어요.

예제 (Example)

이 코드를 실행해 봐요.

#include <cmath>
#include <iostream>

int main()
{
    std::cout << "pow(2, 10) = " << std::pow(2, 10) << '\n'
              << "pow(2, 0.5) = " << std::pow(2, 0.5) << '\n'
              << "pow(2, -1) = " << std::pow(2, -1) << '\n';
}

더 알아보기 (Learn more)

cppreference