std::pow, std::powf, std::powl
| ヘッダー <cmath> で定義 |
||
| (1) | ||
float pow ( float base, float exp ); double pow ( double base, double exp ); |
(C++23まで) | |
| /* 浮動小数点型 */ pow ( /* 浮動小数点型 */ base, |
(C++23から) (C++26 以降 constexpr) |
|
| float pow ( float base, int exp ); double pow ( double base, int exp ); |
(2) | (C++11まで) |
| float powf( float base, float exp ); |
(3) | (C++11以降) (C++26 以降 constexpr) |
| long double powl( long double base, long double exp ); |
(4) | (C++11以降) (C++26 以降 constexpr) |
| 追加のオーバーロード (C++11以降) |
||
| ヘッダー <cmath> で定義 |
||
| template< class Arithmetic1, class Arithmetic2 > /* 共通浮動小数点型 */ |
(A) | (C++26 以降 constexpr) |
std::pow のオーバーロードを提供する。(C++23以降)|
A) その他の算術型の組み合わせすべてに対して、追加のオーバーロードが提供されます。
|
(C++11以降) |
目次 |
[編集] パラメータ
| base | - | base: 浮動小数点数または整数値 |
| exp | - | exp: 浮動小数点数または整数値 |
[編集] 戻り値
エラーが発生しない場合、base を exp 乗した値 (baseexp
) が返される。
領域エラーが発生した場合、実装定義の値が返される (サポートされている場合はNaN)。
極エラーまたはオーバーフローによる範囲エラーが発生した場合、±HUGE_VAL、±HUGE_VALF、または ±HUGE_VALL が返される。
アンダーフローによる範囲エラーが発生した場合、正確な結果 (丸め後) が返される。
[編集] エラー処理
エラーは math_errhandling で指定された通りに報告される。
base が有限で負であり、exp が有限で非整数である場合、領域エラーが発生し、範囲エラーが発生する可能性がある。
base がゼロで exp がゼロの場合、領域エラーが発生する可能性がある。
base がゼロで exp が負の場合、領域エラーまたは極エラーが発生する可能性がある。
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- pow(+0, exp) (exp が負の奇数の整数) は +∞ を返し、FE_DIVBYZERO を発生させる。
- pow(-0, exp) (exp が負の奇数の整数) は -∞ を返し、FE_DIVBYZERO を発生させる。
- pow(±0, exp) (exp が負で有限であり、偶数の整数または非整数) は +∞ を返し、FE_DIVBYZERO を発生させる。
- pow(±0, -∞) は +∞ を返し、FE_DIVBYZERO を発生させる可能性がある。
- pow(+0, exp) (exp が正の奇数の整数) は +0 を返す。
- pow(-0, exp) (exp が正の奇数の整数) は -0 を返す。
- pow(±0, exp) (exp が正の非整数または正の偶数の整数) は +0 を返す。
- pow(-1, ±∞) は 1 を返す。
- pow(+1, exp) は、exp が NaN の場合でも、任意の exp に対して 1 を返す。
- pow(base, ±0) は、base が NaN の場合でも、任意の base に対して 1 を返す。
- pow(base, exp) は、base が有限で負であり、exp が有限で非整数である場合、NaN を返し、FE_INVALID を発生させる。
- pow(base, -∞) は、任意の
|base| < 1に対して +∞ を返す。 - pow(base, -∞) は、任意の
|base| > 1に対して +0 を返す。 - pow(base, +∞) は、任意の
|base| < 1に対して +0 を返す。 - pow(base, +∞) は、任意の
|base| > 1に対して +∞ を返す。 - pow(-∞, exp) は、exp が負の奇数の整数である場合、-0 を返す。
- pow(-∞, exp) は、exp が負の非整数または負の偶数の整数である場合、+0 を返す。
- pow(-∞, exp) は、exp が正の奇数の整数である場合、-∞ を返す。
- pow(-∞, exp) は、exp が正の非整数または正の偶数の整数である場合、+∞ を返す。
- pow(+∞, exp) は、任意の負の exp に対して +0 を返す。
- pow(+∞, exp) は、任意の正の exp に対して +∞ を返す。
- 上記で指定された場合を除き、いずれかの引数がNaNの場合、NaNが返される。
[編集] 備考
C++98では、Cの pow() に加えて、exp が int 型であるオーバーロードが追加され、std::pow(float, int) の戻り値の型は float であった。しかし、C++11で導入された追加のオーバーロードでは、std::pow(float, int) は double を返すように指定されている。LWG issue 550 はこの競合を対象として提起され、その解決策は追加の int exp オーバーロードを削除することである。
std::pow は負の数の根を求めるのに使用できないが、std::cbrt は exp が 1/3 の一般的なケースのために提供されている。
追加のオーバーロードは (A) とまったく同じように提供される必要はない。それらは、最初の引数 num1 と2番目の引数 num2 に対して以下を保証するのに十分である必要がある。
|
(C++23まで) |
|
num1 と num2 が算術型の場合、std::pow(num1, num2) は std::pow(static_cast</*共通浮動小数点型*/>(num1), そのような最高のランクとサブランクセを持つ浮動小数点型が存在しない場合、オーバーロード解決は提供されたオーバーロードから使用可能な候補を導出しません。 |
(C++23から) |
[編集] 例
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { // typical usage std::cout << "pow(2, 10) = " << std::pow(2, 10) << '\n' << "pow(2, 0.5) = " << std::pow(2, 0.5) << '\n' << "pow(-2, -3) = " << std::pow(-2, -3) << '\n'; // special values std::cout << "pow(-1, NAN) = " << std::pow(-1, NAN) << '\n' << "pow(+1, NAN) = " << std::pow(+1, NAN) << '\n' << "pow(INFINITY, 2) = " << std::pow(INFINITY, 2) << '\n' << "pow(INFINITY, -1) = " << std::pow(INFINITY, -1) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "pow(-1, 1/3) = " << std::pow(-1, 1.0 / 3) << '\n'; if (errno == EDOM) std::cout << " errno == EDOM " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_INVALID)) std::cout << " FE_INVALID raised\n"; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "pow(-0, -3) = " << std::pow(-0.0, -3) << '\n'; if (std::fetestexcept(FE_DIVBYZERO)) std::cout << " FE_DIVBYZERO raised\n"; }
実行結果の例
pow(2, 10) = 1024
pow(2, 0.5) = 1.41421
pow(-2, -3) = -0.125
pow(-1, NAN) = nan
pow(+1, NAN) = 1
pow(INFINITY, 2) = inf
pow(INFINITY, -1) = 0
pow(-1, 1/3) = -nan
errno == EDOM Numerical argument out of domain
FE_INVALID raised
pow(-0, -3) = -inf
FE_DIVBYZERO raised[編集] 関連項目
| (C++11)(C++11) |
平方根を計算する (√x) (関数) |
| (C++11)(C++11)(C++11) |
立方根を計算する (3√x) (関数) |
| (C++11)(C++11)(C++11) |
斜辺 √x2 +y2 を計算する および √x2 +y2 +z2 (C++17 から) (関数) |
| 複素数のべき乗、引数の一方または両方が複素数 (関数テンプレート) | |
| std::pow 関数を2つのvalarray、またはvalarrayと値に適用する (function template) | |
| C ドキュメント の pow
| |