命名空间
变体
操作

pow、powf、powl

来自 cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
类型
(C99)(C99)    

(C99)(C99)    

函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小运算
(C99)
(C23)    
指数函数
(C23)
(C99)
(C99)
(C23)
(C23)
(C99)
(C99)(C23)
(C23)
(C23)
幂函数
(C99)
(C23)
(C23)
(C99)
pow
(C23)
(C23)
三角函数和双曲函数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
误差函数和伽马函数
(C99)
(C99)
(C99)
(C99)
最近整数浮点数运算
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点数操作函数
(C99)(C99)
(C99)(C23)
(C99)
缩窄操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子和量子指数函数
十进制重新编码函数
全序和有效载荷函数
分类
(C99)
(C99)
(C99)
(C23)
宏常量
特殊浮点数
(C99)(C23)
参数和返回值
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
在头文件 <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) 计算 baseexponent 次幂的值。
4) 类型泛型宏:如果任何参数的类型为 long double,则调用 powl。否则,如果任何参数的类型为整数类型或 double,则调用 pow。否则,调用 powf。如果至少有一个参数是复数或虚数,则该宏会调用相应的复数函数 (cpowfcpowcpowl)。

内容

[编辑] 参数

base - 底数作为浮点数
exponent - 指数作为浮点数

[编辑] 返回值

如果未发生任何错误,则返回 baseexponent 次幂 (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,即使 exponentNaN
  • pow(base, ±0) 返回 1,对于任何 base,即使 baseNaN
  • 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 用于 exponent1 / 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) [edit]
(C99)(C99)(C99)
计算立方根 (3x)
(function) [edit]
(C99)(C99)(C99)
计算两个给定数字的平方和的平方根 (x2
+y2
)
(function) [edit]
(C99)(C99)(C99)
计算复数幂函数
(function) [edit]
C++ 文档 for pow