pow, powf, powl
|
定义于头文件
<math.h>
|
||
|
float
powf
(
float
base,
float
exponent
)
;
|
(1) | (C99 起) |
|
double
pow
(
double
base,
double
exponent
)
;
|
(2) | |
|
long
double
powl
(
long
double
base,
long
double
exponent
)
;
|
(3) | (C99 起) |
|
定义于头文件
<tgmath.h>
|
||
|
#define pow( base, exponent )
|
(4) | (C99 起) |
powl
。否则,若任一参数具有整数类型或类型
double
,则调用
pow
。否则调用
powf
。若至少一个参数为复数或虚数,则该宏调用对应的复数函数(
cpowf
、
cpow
、
cpowl
)。
目录 |
参数
| base | - | 底数的浮点数值 |
| exponent | - | 指数的浮点数值 |
返回值
如果未发生错误,则返回
base
的
exponent
次幂(
base
exponent
)。
如果发生定义域错误,则返回一个由实现定义的值(在支持 NaN 的情况下返回 NaN)。
如果发生极点错误或由于溢出导致的范围错误,将返回
±
HUGE_VAL
、
±HUGE_VALF
或
±HUGE_VALL
。
如果由于下溢发生范围错误,将返回正确结果(舍入后)。
错误处理
错误报告方式遵循
math_errhandling
中的规范。
如果 base 为有限负值且 exponent 为有限非整数值,将发生定义域错误并可能发生值域错误。
如果 base 为零且 exponent 为零,则可能出现定义域错误。
如果 base 为零且 exponent 为负数,则可能出现定义域错误或极点错误。
如果实现支持 IEEE 浮点算术 (IEC 60559),
-
pow
(
+
0
, exponent
)
,当
exponent
为负奇数时,返回
+∞并触发 FE_DIVBYZERO -
pow
(
-
0
, exponent
)
,当
exponent
为负奇数时,返回
-∞并触发 FE_DIVBYZERO - pow ( ± 0 , exponent ) ,当 exponent 为负数、有限值且为偶数或非整数时,返回 +∞ 并触发 FE_DIVBYZERO
- pow ( ± 0 , - ∞ ) 返回 +∞ 并可能触发 FE_DIVBYZERO (C23前)
- pow ( + 0 , exponent ) ,当 exponent 为正奇数时,返回 +0
- pow ( - 0 , exponent ) ,当 exponent 为正奇数时,返回 -0
- pow ( ± 0 , exponent ) ,当 exponent 为正非整数或正偶数时,返回 +0
- pow ( - 1 , ±∞ ) 返回 1
-
pow
(
+
1
, exponent
)
对任意
exponent
返回
1
,即使
exponent
为
NaN -
pow
(
base, ±
0
)
对任意
base
返回
1
,即使
base
为
NaN -
pow
(
base, exponent
)
当
base
为有限负数且
exponent
为有限非整数时,返回
NaN并触发 FE_INVALID -
pow
(
base,
-
∞
)
对任意
|base|<1返回 +∞ -
pow
(
base,
-
∞
)
对任意
|base|>1返回 +0 -
pow
(
base,
+
∞
)
对任意
|base|<1返回 +0 -
pow
(
base,
+
∞
)
对任意
|base|>1返回 +∞ - pow ( - ∞, exponent ) 当 exponent 为负奇数时返回 -0
- pow ( - ∞, exponent ) 当 exponent 为负非整数或负偶数时返回 +0
- pow ( - ∞, exponent ) 当 exponent 为正奇数时返回 -∞
- pow ( - ∞, exponent ) 当 exponent 为正非整数或正偶数时返回 +∞
- pow ( + ∞, exponent ) 对任意负 exponent 返回 +0
- pow ( + ∞, exponent ) 对任意正 exponent 返回 +∞
- 除上述规定外,若任一参数为 NaN,则返回 NaN
注释
尽管
pow
函数不能用于计算负数的根,但针对指数为
1
/
3
的常见情况,专门提供了
cbrt
函数。
示例
#include <errno.h> #include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { // 典型用法 printf("pow(2, 10) = %f\n", pow(2, 10)); printf("pow(2, 0.5) = %f\n", pow(2, 0.5)); printf("pow(-2, -3) = %f\n", pow(-2, -3)); // 特殊值 printf("pow(-1, NAN) = %f\n", pow(-1, NAN)); printf("pow(+1, NAN) = %f\n", pow(+1, NAN)); printf("pow(INFINITY, 2) = %f\n", pow(INFINITY, 2)); printf("pow(INFINITY, -1) = %f\n", pow(INFINITY, -1)); // 错误处理 errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("pow(-1, 1/3) = %f\n", pow(-1, 1.0 / 3)); if (errno == EDOM) perror(" errno == EDOM"); if (fetestexcept(FE_INVALID)) puts(" FE_INVALID raised"); feclearexcept(FE_ALL_EXCEPT); printf("pow(-0, -3) = %f\n", pow(-0.0, -3)); if (fetestexcept(FE_DIVBYZERO)) puts(" FE_DIVBYZERO raised"); }
可能的输出:
pow(2, 10) = 1024.000000
pow(2, 0.5) = 1.414214
pow(-2, -3) = -0.125000
pow(-1, NAN) = nan
pow(+1, NAN) = 1.000000
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0.000000
pow(-1, 1/3) = -nan
errno == EDOM: Numerical argument out of domain
FE_INVALID raised
pow(-0, -3) = -inf
FE_DIVBYZERO raised
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.12.7.5 pow 函数族
-
- 7.27 泛型数学 <tgmath.h>
-
- F.10.4.5 pow 函数族 (页码: 524-525)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.12.7.4 pow 函数族 (p: 248-249)
-
- 7.25 泛型数学 <tgmath.h> (p: 373-375)
-
- F.10.4.4 pow 函数族 (p: 524-525)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.12.7.4 pow 函数集 (p: 248-249)
-
- 7.25 泛型数学 <tgmath.h> (p: 373-375)
-
- F.10.4.4 pow 函数集 (p: 524-525)
- C99标准(ISO/IEC 9899:1999):
-
- 7.12.7.4 pow函数族(页码:229)
-
- 7.22 泛型数学 <tgmath.h>(页码:335-337)
-
- F.9.4.4 pow函数族(页码:461)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.5.5.1 pow 函数
参见
|
(C99)
(C99)
|
计算平方根 (
√
x
)
(函数) |
|
(C99)
(C99)
(C99)
|
计算立方根 (
3
√
x
)
(函数) |
|
(C99)
(C99)
(C99)
|
计算两数平方和的平方根 (
√
x
2
+y 2 ) (函数) |
|
(C99)
(C99)
(C99)
|
计算复数幂函数
(函数) |
|
C++ 文档
关于
pow
|
|