pow, powf, powl
來自 cppreference.com
定義於標頭檔案 <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) 計算 base 的 exponent 次冪。
4) 型別泛型宏:如果任何引數型別為 long double,則呼叫
powl
。否則,如果任何引數具有整數型別或型別為 double,則呼叫 pow
。否則,呼叫 powf
。如果至少一個引數是複數或虛數,則宏呼叫相應的複數函式(cpowf、cpow、cpowl)。目錄 |
[編輯] 引數
base | - | 浮點值作為底數 |
exponent | - | 浮點值作為指數 |
[編輯] 返回值
如果沒有錯誤發生,返回 base 的 exponent 次冪(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,即使 exponent 為
NaN
- pow(base, ±0) 對任何 base 返回 1,即使 base 為
NaN
- 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 提供了一種常見情況,即 exponent
為 1 / 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) |
計算立方根 (3√x) (函式) |
(C99)(C99)(C99) |
計算兩個給定數的平方和的平方根 (√x2 +y2 ) (函式) |
(C99)(C99)(C99) |
計算複數冪函式 (函式) |
C++ 文件 關於 pow
|