std:: pow, std:: powf, std:: powl
|
ヘッダー
<cmath>
で定義
|
||
| (1) | ||
|
float
pow
(
float
base,
float
exp
)
;
double
pow
(
double
base,
double
exp
)
;
|
(C++23まで) | |
|
/* floating-point-type */
pow
(
/* floating-point-type */
base,
|
(C++23から)
(constexpr C++26から) |
|
|
float
pow
(
float
base,
int
exp
)
;
double
pow
(
double
base,
int
exp
)
;
|
(2) | (C++11まで) |
|
float
powf
(
float
base,
float
exp
)
;
|
(3) |
(C++11から)
(constexpr C++26から) |
|
long
double
powl
(
long
double
base,
long
double
exp
)
;
|
(4) |
(C++11から)
(constexpr C++26から) |
|
追加のオーバーロード
(C++11から)
|
||
|
ヘッダー
<cmath>
で定義
|
||
|
template
<
class
Arithmetic1,
class
Arithmetic2
>
/* common-floating-point-type */
|
(A) | (constexpr C++26から) |
std::pow
のオーバーロードを、パラメータ
base
と
exp
の型としてすべてのcv修飾されていない浮動小数点型に対して提供します。
(C++23以降)
|
A)
算術型のその他のすべての組み合わせに対して、追加のオーバーロードが提供されます。
|
(C++11以降) |
目次 |
パラメータ
| base | - | 浮動小数点または整数値としての基数 |
| exp | - | 浮動小数点または整数値としての指数 |
戻り値
エラーが発生しない場合、
base
の
exp
乗(
base
exp
)が返されます。
定義域エラーが発生した場合、実装定義の値が返されます(NaNがサポートされている場合は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 に対して1を返す( exp がNaNの場合も含む)。
- pow ( base, ± 0 ) は任意の base に対して1を返す( base がNaNの場合も含む)。
- 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 と第二引数 num2 について以下を保証するのに十分であればよいのです:
|
(C++23まで) |
|
num1
と
num2
が算術型を持つ場合、
std
::
pow
(
num1, num2
)
は
std
::
pow
(
static_cast
<
/*common-floating-point-type*/
>
(
num1
)
,
最も高いランクとサブランクを持つ浮動小数点型が存在しない場合、 オーバーロード解決 は提供されたオーバーロードから使用可能な候補を結果として生成しない。 |
(C++23以降) |
例
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { // 典型的な使用例 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'; // 特殊な値 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'; // エラーハンドリング 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)
|
斜辺を計算する
√
x
2
+y 2 および √ x 2 +y 2 +z 2 (C++17以降) (関数) |
|
複素数の累乗(一方または両方の引数が複素数でも可)
(関数テンプレート) |
|
|
関数
std::pow
を2つのvalarray、またはvalarrayと値に適用する
(関数テンプレート) |
|
|
Cドキュメント
for
pow
|
|