名前空間
変種
操作

pow, powf, powl

提供: cppreference.com
< c‎ | numeric‎ | math
 
 
 
一般的な数学関数
関数
基本操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
指数関数
(C99)
(C99)
(C99)
(C99)
冪関数
(C99)
(C99)
pow
三角関数と双曲線関数
(C99)
(C99)
(C99)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
最も近い整数
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
浮動小数点操作関数
(C99)(C99)
(C99)
(C99)
分類
(C99)
(C99)
(C99)
(C99)(C99)
マクロ定数
 
ヘッダ <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 - 浮動小数点値としての指数

[編集] 戻り値

エラーが発生しなければ、 baseexponent 乗 (baseexponent
) が返されます。

定義域エラーが発生した場合、処理系定義の値 (サポートされていれば 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 を発生させるかもしれません。 (C2x未満)
  • pow(+0, exponent) は、 exponent が正の奇数であれば、 +0 を返します。
  • pow(-0, exponent) は、 exponent が正の奇数であれば、 -0 を返します。
  • pow(±0, exponent) は、 exponent が正の非整数または正の偶数であれば、 +0 を返します。
  • pow(-1, ±∞)1 を返します。
  • pow(+1, exponent) は、任意の exponent について (exponentNaN であっても)、 1 を返します。
  • pow(base, ±0) は、任意の base について (baseNaN であっても)、 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 が返されます。

[編集] ノート

pow は負の値の根を取得するために使用することはできませんが、 exponent が 1/3 である一般的なケースに対しては cbrt が提供されています。

[編集]

#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <fenv.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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.7.4 The pow functions (p: 248-249)
  • 7.25 Type-generic math <tgmath.h> (p: 373-375)
  • F.10.4.4 The pow functions (p: 524-525)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.7.4 The pow functions (p: 229)
  • 7.22 Type-generic math <tgmath.h> (p: 335-337)
  • F.9.4.4 The pow functions (p: 461)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.5.5.1 The pow function

[編集] 関連項目

(C99)(C99)
平方根 (x) を計算します
(関数) [edit]
(C99)(C99)(C99)
立方根 (3x) を計算します
(関数) [edit]
(C99)(C99)(C99)
2つの値の二乗和の平方根 (x2
+y2
) を計算します
(関数) [edit]
(C99)(C99)(C99)
複素冪関数を計算します
(関数) [edit]