Defined in header <cmath> | ||||
---|---|---|---|---|
| (1) | |||
| (2) | |||
| (3) | |||
| (4) | (until C++11) | ||
| (5) | (until C++11) | ||
| (6) | (until C++11) | ||
| (7) | (since C++11) |
base
raised to the power exp
or iexp
.double
. If any argument is long double
, then the return type Promoted
is also long double
, otherwise the return type is always double
.Parameters
base | - | base as a value of floating-point or integral type |
exp | - | exponent as a value of floating-point or integral type |
iexp | - | exponent as integer value |
Return value
If no errors occur, base
raised to the power of exp
(or iexp
) (baseexp
), is returned.
If a domain error occurs, an implementation-defined value is returned (NaN where supported).
If a pole error or a range error due to overflow occurs, ±HUGE_VAL
, ±HUGE_VALF
, or ±HUGE_VALL
is returned.
If a range error occurs due to underflow, the correct result (after rounding) is returned.
Error handling
Errors are reported as specified in math_errhandling.
If base
is finite and negative and exp
is finite and non-integer, a domain error occurs and a range error may occur.
If base
is zero and exp
is zero, a domain error may occur.
If base
is zero and exp
is negative, a domain error or a pole error may occur.
If the implementation supports IEEE floating-point arithmetic (IEC 60559),
-
pow(+0, exp)
, whereexp
is a negative odd integer, returns +∞ and raisesFE_DIVBYZERO
-
pow(-0, exp)
, whereexp
is a negative odd integer, returns -∞ and raisesFE_DIVBYZERO
-
pow(±0, exp)
, whereexp
is negative, finite, and is an even integer or a non-integer, returns +∞ and raisesFE_DIVBYZERO
-
pow(±0, -∞)
returns +∞ and may raiseFE_DIVBYZERO
-
pow(+0, exp)
, whereexp
is a positive odd integer, returns +0 -
pow(-0, exp)
, whereexp
is a positive odd integer, returns -0 -
pow(±0, exp)
, whereexp
is positive non-integer or a positive even integer, returns +0 -
pow(-1, ±∞)
returns1
-
pow(+1, exp)
returns1
for anyexp
, even whenexp
isNaN
-
pow(base, ±0)
returns1
for anybase
, even whenbase
isNaN
-
pow(base, exp)
returnsNaN
and raisesFE_INVALID
ifbase
is finite and negative andexp
is finite and non-integer. -
pow(base, -∞)
returns +∞ for any|base|<1
-
pow(base, -∞)
returns +0 for any|base|>1
-
pow(base, +∞)
returns +0 for any|base|<1
-
pow(base, +∞)
returns +∞ for any|base|>1
-
pow(-∞, exp)
returns -0 ifexp
is a negative odd integer -
pow(-∞, exp)
returns +0 ifexp
is a negative non-integer or even integer -
pow(-∞, exp)
returns -∞ ifexp
is a positive odd integer -
pow(-∞, exp)
returns +∞ ifexp
is a positive non-integer or even integer -
pow(+∞, exp)
returns +0 for any negativeexp
-
pow(+∞, exp)
returns +∞ for any positiveexp
- except where specified above, if any argument is NaN, NaN is returned
Notes
pow(float, int)
returns float
until C++11 (per overload 4) but returns double
since C++11 (per overload 7).
Although std::pow
cannot be used to obtain a root of a negative number, std::cbrt
is provided for the common case where exp
is 1/3.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> #include <cmath> #include <cerrno> #include <cfenv> #include <cstring> #pragma STDC FENV_ACCESS ON int main() { // typical usage 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' ; // special values 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' ; // error handling 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" ; } |
Possible output:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
See also
computes square root (√x) (function) | |
(C++11) | computes cubic root (3√x) (function) |
(C++11) | computes square root of the sum of the squares of two given numbers (√x2 +y2 ) (function) |
complex power, one or both arguments may be a complex number (function template) | |
applies the function std::pow to two valarrays or a valarray and a value (function template) | |
C documentation for pow |
Please login to continue.