pow, powf, powl
From 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 が呼び出されます。少なくとも1つの引数が複素数または虚数である場合、マクロは対応する複素数関数(cpowf、cpow、cpowl)を呼び出します。目次 |
[edit] パラメータ
| base | - | 浮動小数点値としての基数 |
| 指数 | - | 浮動小数点値としての指数 |
[edit] 戻り値
エラーが発生しない場合、base を exponent 乗した値(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 が
NaNの場合でも、あらゆる exponent に対して 1 を返します。 - pow(base, ±0) は、base が
NaNの場合でも、あらゆる base に対して 1 を返します。 - 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 では負の数の平方根を得ることはできませんが、1 / 3 が exponent である一般的なケースには 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 The pow functions
- 7.27 Type-generic math <tgmath.h>
- F.10.4.5 The pow functions (p: 524-525)
- C17標準 (ISO/IEC 9899:2018)
- 7.12.7.4 The pow functions (p: 248-249)
- 7.25 型総称数学関数 <tgmath.h> (p: 373-375)
- F.10.4.4 The pow functions (p: 524-525)
- C11標準 (ISO/IEC 9899:2011)
- 7.12.7.4 The pow functions (p: 248-249)
- 7.25 型総称数学関数 <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 型総称数学関数 <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
[edit] 関連項目
| (C99)(C99) |
平方根を計算する (√x) (関数) |
| (C99)(C99)(C99) |
立方根を計算する (3√x) (関数) |
| (C99)(C99)(C99) |
2つの与えられた数の平方の和の平方根を計算する (√x2 +y2 ) (関数) |
| (C99)(C99)(C99) |
複素冪関数を計算する (関数) |
| C++ ドキュメント for pow
| |