pow, powf, powl

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(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)
类型
宏常量
 
定义于头文件 <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, ±∞) returns 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) 返回 -0 ,若 exponent 为负奇整数
  • pow(-∞, exponent) 返回 +0 ,若 exponent 为负非整数或负偶数
  • pow(-∞, exponent) 返回 -∞ ,若 exponent 为正奇整数
  • pow(-∞, exponent) 返回 +∞ ,若 exponent 为正非整数或正偶数
  • pow(+∞, exponent) 对任何 exponent 返回 +0
  • pow(+∞, exponent) 对任何 exponent 返回 +∞
  • 除了指定于上处,若任何参数为 NaN ,则返回 NaN

注解

尽管 pow 不能获得负数的开方根,也为 exponent 为 1/3 的常用情况提供了 cbrt

示例

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <fenv.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

引用

  • 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

参阅

(C99)(C99)
计算平方根( x
(函数)
(C99)(C99)(C99)
计算立方根( 3x
(函数)
(C99)(C99)(C99)
计算两个给定数平方和的平方根 ( x2
+y2

(函数)
(C99)(C99)(C99)
计算复数幂函数
(函数)