命名空间
变体
操作

pow, powf, powl

来自 cppreference.cn
< c‎ | 数值‎ | 数学
 
 
 
常用数学函数
函数
基本操作
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大值/最小值操作
(C99)
(C99)
指数函数
(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)
(C23)(C23)(C23)(C23)
浮点数操作
(C99)(C99)
(C99)(C23)
(C99)
窄化操作
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子与量子指数
十进制重新编码函数
总序和载荷函数
分类
(C99)
(C99)
(C99)
(C23)
误差函数和伽马函数
(C99)
(C99)
(C99)
(C99)
类型
宏常量
特殊浮点值
(C99)(C23)
参数和返回值
错误处理
快速操作指示符
 
定义于头文件 <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 时返回 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,即使 exponentNaN
  • pow(base, ±0) 对任何 base 返回 1,即使 baseNaN
  • pow(base, exponent) 返回 NaN 并引发 FE_INVALID,如果 base 是有限的负数,且 exponent 是有限的非整数。
  • 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 不能用于获得负数的根,但 cbrt 提供了一种常见情况,即 exponent1 / 3

[编辑] 示例

#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

[编辑] 参考资料

  • C23 标准 (ISO/IEC 9899:2024)
  • 7.12.7.5 pow 函数
  • 7.27 类型泛型数学 <tgmath.h>
  • F.10.4.5 pow 函数 (p: 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 函数 (p: 229)
  • 7.22 类型通用数学 <tgmath.h> (p: 335-337)
  • F.9.4.4 pow 函数 (p: 461)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 4.5.5.1 pow 函数

[编辑] 另请参阅

(C99)(C99)
计算平方根 (x)
(函数) [编辑]
(C99)(C99)(C99)
计算立方根 (3x)
(函数) [编辑]
(C99)(C99)(C99)
计算两个给定数的平方和的平方根 (x2
+y2
)
(函数) [编辑]
(C99)(C99)(C99)
计算复数幂函数
(函数) [编辑]
C++ 文档 关于 pow