Namespaces
Variants

std:: pow, std:: powf, std:: powl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
ヘッダー <cmath> で定義
(1)
float pow ( float base, float exp ) ;

double pow ( double base, double exp ) ;

long double pow ( long double base, long double exp ) ;
(C++23まで)
/* floating-point-type */

pow ( /* floating-point-type */ base,

/* floating-point-type */ exp )
(C++23から)
(constexpr C++26から)
float pow ( float base, int exp ) ;

double pow ( double base, int exp ) ;

long double pow ( long 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から)
ヘッダー <cmath> で定義
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

pow ( Arithmetic1 base, Arithmetic2 exp ) ;
(A) (constexpr C++26から)
1-4) base の値を exp 乗した値を計算します。 ライブラリは、 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 について以下を保証するのに十分であればよいのです:

  • num1 または num2 の型が long double の場合、 std :: pow ( num1, num2 ) std :: pow ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    と同じ効果を持つ。
  • それ以外の場合、 num1 および/または num2 の型が double または整数型の場合、 std :: pow ( num1, num2 ) std :: pow ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    と同じ効果を持つ。
  • それ以外の場合、 num1 または num2 の型が float の場合、 std :: pow ( num1, num2 ) std :: pow ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    と同じ効果を持つ。
(C++23まで)

num1 num2 が算術型を持つ場合、 std :: pow ( num1, num2 ) std :: pow ( static_cast < /*common-floating-point-type*/ > ( num1 ) ,
static_cast < /*common-floating-point-type*/ > ( num2 ) )
と同じ効果を持つ。ここで /*common-floating-point-type*/ num1 num2 の型の間で最も高い 浮動小数点変換ランク と最も高い 浮動小数点変換サブランク を持つ浮動小数点型であり、整数型の引数は double と同じ浮動小数点変換ランクを持つと見なされる。

最も高いランクとサブランクを持つ浮動小数点型が存在しない場合、 オーバーロード解決 は提供されたオーバーロードから使用可能な候補を結果として生成しない。

(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と値に適用する
(関数テンプレート)