pow、powf、powl
来自 cppreference.com
在头文件 <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) |
1-3) 计算 base 的 exponent 次幂的值。
4) 类型泛型宏:如果任何参数的类型为 long double,则调用
powl
。否则,如果任何参数的类型为整数类型或 double,则调用 pow
。否则,调用 powf
。如果至少有一个参数是复数或虚数,则该宏会调用相应的复数函数 (cpowf、cpow、cpowl)。内容 |
[编辑] 参数
base | - | 底数作为浮点数 |
exponent | - | 指数作为浮点数 |
[编辑] 返回值
如果未发生任何错误,则返回 base 的 exponent 次幂 (baseexponent
)。
如果发生域错误,则返回实现定义的值(在支持的情况下返回 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) 返回 1,对于任何 exponent,即使 exponent 是
NaN
- pow(base, ±0) 返回 1,对于任何 base,即使 base 是
NaN
- pow(base, exponent) 返回
NaN
并引发 FE_INVALID,如果 base 是有限负数且 exponent 是有限非整数。 - pow(base, -∞) 返回 +∞,对于任何
|base|<1
- pow(base, -∞) 返回 +0,对于任何
|base|>1
- pow(base, +∞) 返回 +0,对于任何
|base|<1
- pow(base, +∞) 返回 +∞,对于任何
|base|>1
- pow(-∞, exponent) 返回 -0,如果 exponent 是负奇数整数
- pow(-∞, exponent) 返回 +0,如果 exponent 是负非整数或负偶数整数
- pow(-∞, exponent) 返回 -∞,如果 exponent 是正奇数整数
- pow(-∞, exponent) 返回 +∞,如果 exponent 是正非整数或正偶数整数
- pow(+∞, exponent) 返回 +0,对于任何负数 exponent
- pow(+∞, exponent) 返回 +∞,对于任何正数 exponent
- 除了上面指定的,如果任何参数是 NaN,则返回 NaN。
[edit] Notes
虽然 pow
不能用于获得负数的根,但 cbrt 用于 exponent
为 1 / 3 的常见情况。
[edit] Example
运行此代码
#include <errno.h> #include <fenv.h> #include <math.h> #include <stdio.h> // #pragma STDC FENV_ACCESS ON int main(void) { // typical usage 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)); // special values 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)); // error handling 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
[edit] References
- C23 标准 (ISO/IEC 9899:2024)
- 7.12.7.5 The pow functions
- 7.27 Type-generic math <tgmath.h>
- F.10.4.5 The pow functions (p: 524-525)
- C17 标准 (ISO/IEC 9899:2018)
- 7.12.7.4 The pow functions (p: 248-249)
- 7.25 Type-generic math <tgmath.h> (p: 373-375)
- F.10.4.4 The pow functions (p: 524-525)
- C11 标准 (ISO/IEC 9899:2011)
- 7.12.7.4 The pow functions (p: 248-249)
- 7.25 Type-generic math <tgmath.h> (p: 373-375)
- F.10.4.4 The pow functions (p: 524-525)
- C99 标准 (ISO/IEC 9899:1999)
- 7.12.7.4 The pow functions (p: 229)
- 7.22 Type-generic math <tgmath.h> (p: 335-337)
- F.9.4.4 The pow functions (p: 461)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.5.5.1 The pow function
[edit] See also
(C99)(C99) |
计算平方根 (√x) (function) |
(C99)(C99)(C99) |
计算立方根 (3√x) (function) |
(C99)(C99)(C99) |
计算两个给定数字的平方和的平方根 (√x2 +y2 ) (function) |
(C99)(C99)(C99) |
计算复数幂函数 (function) |
C++ 文档 for pow
|