Namespaces
Variants

pow, powf, powl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
(C99)
pow
(C23)
(C23)
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
ヘッダーで定義 <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 )を呼び出す。

目次

パラメータ

base - 浮動小数点値としての基数
exponent - 浮動小数点値としての指数

戻り値

エラーが発生しない場合、 base exponent 乗( base exponent
)が返されます。

定義域エラーが発生した場合、実装定義の値が返されます(NaNがサポートされている場合は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 を発生させる可能性がある (C23まで)
  • pow ( + 0 , exponent ) 、ただし exponent が正の奇数の整数の場合、+0を返す
  • pow ( - 0 , exponent ) 、ここで exponent が正の奇数の場合、-0を返します
  • pow ( ± 0 , exponent ) 、ただし exponent が正の非整数または正の偶数の整数の場合、+0を返す
  • pow ( - 1 , ±∞ ) 1 を返します
  • pow ( + 1 , exponent ) は任意の exponent に対して 1 を返します。 exponent NaN の場合でも同様です。
  • pow ( base, ± 0 ) は、あらゆる base に対して 1 を返します。 base NaN の場合でも同様です。
  • pow ( base, exponent ) NaN を返し、 FE_INVALID を発生させる。ただし、 base が有限値かつ負の値であり、かつ exponent が有限値かつ非整数の場合に限る。
  • 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 を使用することはできませんが、 cbrt exponent 1 / 3 という一般的なケースに対して提供されています。

#include <errno.h>
#include <fenv.h>
#include <math.h>
#include <stdio.h>
// #pragma STDC FENV_ACCESS ON
int main(void)
{
    // 典型的な使用例
    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));
    // 特殊な値
    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));
    // エラー処理
    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

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.12.7.5 pow関数群
  • 7.27 型総称数学 <tgmath.h>
  • F.10.4.5 pow関数群 (p: 524-525)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.12.7.4 pow関数群 (p: 248-249)
  • 7.25 総称数学 <tgmath.h> (p: 373-375)
  • F.10.4.4 pow関数群 (p: 524-525)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.12.7.4 pow関数群 (p: 248-249)
  • 7.25 総称型数学 <tgmath.h> (p: 373-375)
  • F.10.4.4 pow関数群 (p: 524-525)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.12.7.4 pow関数群 (p: 229)
  • 7.22 総称数学 <tgmath.h> (p: 335-337)
  • F.9.4.4 pow関数群 (p: 461)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.5.5.1 pow関数

関連項目

(C99) (C99)
平方根を計算する ( x )
(関数)
(C99) (C99) (C99)
立方根を計算する ( 3 x )
(関数)
(C99) (C99) (C99)
与えられた2つの数の二乗和の平方根を計算する ( x 2
+y 2
)
(関数)
(C99) (C99) (C99)
複素数の累乗関数を計算する
(関数)