C
数值 | Numerics

powl

pow, powf, powl

在头文件中定义
float powf( float base, float exponent (1)(since C99)
double pow( double base, double exponent (2)
long double powl( long double base, long double exponent (3)(since C99)
Defined in header <tgmath.h>
#define pow( base, exponent )(4)(since C99)

1-3)计算base提高到功率的值exponent

4)类型 - 通用宏:如果任何参数具有类型long doublepowl则被调用。否则,如果任何参数具有整数类型或具有类型doublepow则被调用。否则,powf被调用。如果至少一个参数是复杂的或虚,则宏调用相应的复变函数(cpowfcpowcpowl)。

参数

基础-基础为浮点值
指数-指数为浮点值

返回值

如果没有错误发生,base提高到exponent(基础组件的力量

)返回。

如果发生域错误,则返回实现定义的值(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不能用于获得负数的根,cbrt但是为exponent1/3 的常见情况提供。

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

参考

  • C11标准(ISO / IEC 9899:2011):