std:: pow, std:: powf, std:: powl
|
헤더 파일에 정의됨
<cmath>
|
||
| (1) | ||
|
float
pow
(
float
base,
float
exp
)
;
double
pow
(
double
base,
double
exp
)
;
|
(C++23 이전) | |
|
/* floating-point-type */
pow
(
/* floating-point-type */
base,
|
(C++23 이후)
(C++26부터 constexpr) |
|
|
float
pow
(
float
base,
int
exp
)
;
double
pow
(
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 */
|
(A) | (C++26부터 constexpr) |
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 에 대해 다음을 보장할 수 있을 정도로만 제공되면 됩니다:
|
(C++23 이전) |
|
num1
과
num2
이 산술 타입을 가지는 경우,
std
::
pow
(
num1, num2
)
은
std
::
pow
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
가장 높은 순위와 하위 순위를 가지는 부동소수점 타입이 존재하지 않는 경우, 오버로드 해결 은 제공된 오버로드들 중에서 사용 가능한 후보를 결과로 내지 않습니다. |
(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
|
|