std::pow, std::powf, std::powl
来自cppreference.com
定义于头文件 <cmath>
|
||
(1) | ||
float pow ( float base, float exp ); |
||
float powf( float base, float exp ); |
(C++11 起) | |
double pow ( double base, double exp ); |
(2) | |
(3) | ||
long double pow ( long double base, long double exp ); |
||
long double powl( long double base, long double exp ); |
(C++11 起) | |
float pow ( float base, int iexp ); |
(4) | (C++11 前) |
double pow ( double base, int iexp ); |
(5) | (C++11 前) |
long double pow ( long double base, int iexp ); |
(6) | (C++11 前) |
Promoted pow ( Arithmetic1 base, Arithmetic2 exp ); |
(7) | (C++11 起) |
1-6) 计算
base
的 exp
或 iexp
次幂。7) 1-3) 所不覆盖的所有算术类型组合的重载集或函数模板。若任何参数拥有整数类型,则将它转型为 double 。若任何参数为 long double ,则返回类型
Promoted
亦为 long double ,否则返回类型始终为 double 。参数
base | - | 作为底数的浮点或整数类型值 |
exp | - | 作为指数的浮点或整数类型值 |
iexp | - | 整数值指数 |
返回值
若不出现错误,则返回 base
的 exp
次幂( baseexp
)。
若出现定义域错误,则返回实现定义值(支持的平台上为 NaN )。
若出现极点错误或上溢所致的值域错误,则返回 ±HUGE_VAL
、 ±HUGE_VALF
或 ±HUGE_VALL
。
若出现下溢所致的值域错误,则返回(舍入后的)正确结果。
错误处理
报告 math_errhandling 中指定的错误。
若 base
有限且为负,且 exp
有限且为非整数,则出现定义域错误,并可能出现值域错误。
若 base
为零且 exp
为零,则可能出现定义域错误。
若 base
为零且 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) 返回
NaN
并引发 FE_INVALID ,若base
为有限负数且exp
为有限非整数。 - pow(base, -∞) 对任何
|base|<1
返回 +∞ - pow(base, -∞) 对任何
|base|>1
返回 +0 - pow(base, +∞) 对任何
|base|<1
返回 +0 - pow(base, +∞) 对任何
|base|>1
返回 +∞ - pow(-∞, exp) 返回 -0 ,若
exp
为负奇整数 - pow(-∞, exp) 返回 +0 ,若
exp
为负非整数或负偶数 - pow(-∞, exp) 返回 -∞ ,若
exp
为正奇整数 - pow(-∞, exp) 返回 +∞ ,若
exp
为正非整数或正偶数 - pow(+∞, exp) 对任何
exp
返回 +0 - pow(+∞, exp) 对任何
exp
返回 +∞ - 除了指定于上处,若任何参数为 NaN ,则返回 NaN
注意
pow(float, int)
在 C++11 前返回 float (由重载 4 )但从 C++11 起返回 double (由重载 7 )。
尽管 std::pow
不能获得负数的开方根, exp
为 1/3 的常用情况还提供了 std::cbrt 。
示例
运行此代码
#include <iostream> #include <cmath> #include <cerrno> #include <cfenv> #include <cstring> #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) |
计算两个给定数的平方和的平方根( √x2 +y2 ) (函数) |
复数幂,一或两个参数可为复数 (函数模板) | |
应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值 (函数模板) |