命名空间
变体
操作

pow, powf, powl

来自 cppreference.cn
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(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)。

目录

[edit] 参数

base - 底数,浮点值
exponent - 指数,浮点值

[edit] 返回值

如果没有错误发生,则返回 baseexponent 次幂(baseexponent
)。

如果发生域错误,则返回实现定义的值(如果支持,则为 NaN)。

如果由于上溢发生极点错误或范围错误,则返回 ±HUGE_VAL±HUGE_VALF±HUGE_VALL

如果由于下溢发生范围错误,则返回正确的结果(舍入后)。

[edit] 错误处理

错误按照 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) 如果 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。

[edit] 注解

虽然 pow 不能用于获取负数的根,但为 exponent1 / 3 的常见情况提供了 cbrt

[edit] 示例

#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] 参考文献

  • 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 函数

[edit] 参见

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