POW(3) |
Linux Programmer's Manual |
POW(3) |
名前
pow, powf, powl -累乗関数
書式
#include <math.h>
double pow(double
x
, double
y
);
float powf(float
x
, float
y
);
long double powl(long double
x
, long double
y
);
-lm でリンクする。
glibc 向けの機能検査マクロの要件 (
feature_test_macros(7) 参照):
powf(),
powl():
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
or
cc -std=c99
説明
pow() 関数は
x の
y 乗の値を返す。
返り値
成功すると、これらの関数は
x の
y 乗の値を返す。
x が 0 未満の有限値で
y が整数でない有限値の場合、領域エラー (domain error) が発生し、 NaN が返される。
結果がオーバーフローする場合、範囲エラー (range error) が発生し、各関数はそれぞれ
HUGE_VAL,
HUGE_VALF,
HUGE_VALL を返す。返り値には数学的に正しい符号が付与される。
結果がアンダーフローし、その値が表現可能でない場合、範囲エラーが発生し、 0.0 が返される。
以下で規定されていない場合で、
x か
y が NaN の場合、返り値は NaN となる。
x が +1 の場合、 (
y が NaN であったとしても) 返り値は 1.0 となる。
y が 0 の場合、 (
x が NaN であったとしても) 返り値は 1.0 となる。
x が +0 (-0) で
y が 0 より大きな奇数の場合、返り値は +0 (-0) となる。
x が 0 で、
y が 0 より大きく奇数でない場合、返り値は +0 となる。
x が-1 で、
y が正の無限大か負の無限大の場合、返り値は 1.0 となる。
x の絶対値が 1 未満で、
y が負の無限大の場合、返り値は正の無限大となる。
x 絶対値が 1 より大きく、
y が負の無限大の場合、返り値は +0 となる。
x の絶対値が 1 未満で、
y が正の無限大の場合、返り値は +0 となる。
x の絶対値が 1 より大きく、
y が正の無限大の場合、返り値は正の無限大となる。
x が負の無限大で、
y が 0 より小さい奇数の場合、返り値は-0 となる。
x が負の無限大で、
y が 0 より小さく奇数でない場合、返り値は +0 となる。
x が負の無限大で、
y が 0 より大きい奇数の場合、返り値は負の無限大となる。
x が負の無限大で、
y が 0 より大きく奇数でない場合、返り値は正の無限大となる。
x が正の無限大で、
y が 0 未満の場合、返り値は +0 となる。
x が正の無限大で、
y が 0 より大きい場合、返り値は正の無限大となる。
x が +0 か-0 で、
y が 0 より小さい奇数の場合、極エラー (pole error) が発生し、返り値は
HUGE_VAL,
HUGE_VALF,
HUGE_VALL となる。
x と同じ符号が付与される。
x が +0 か-0 で、
y が 0 より小さく奇数でない場合、極エラーが発生し、返り値は
+HUGE_VAL
,
+HUGE_VALF
,
+HUGE_VALL となる。
エラー
これらの関数を呼び出した際にエラーが発生したかの判定方法についての情報は
math_error(7) を参照のこと。
以下のエラーが発生する可能性がある。
-
領域エラー:
x が負で、
y が整数でない有限値
-
errno に
EDOM が設定される。不正 (invalid) 浮動小数点例外 (
FE_INVALID) が上がる。
-
極エラー:
x がゼロで、
y が負
-
errno に
ERANGE が設定される (「バグ」の節も参照)。 0 による除算 (divide-by-zero) 浮動小数点例外 (
FE_DIVBYZERO) が上がる。
-
範囲エラー: 結果がオーバーフロー
-
errno に
ERANGE が設定される。オーバーフロー浮動小数点例外 (
FE_OVERFLOW) が上がる。
-
範囲エラー: 結果がアンダーフロー
-
errno に
ERANGE が設定される。アンダーフロー浮動小数点例外 (
FE_UNDERFLOW) が上がる。
準拠
C99, POSIX.1-2001.
double 版の関数は SVr4, 4.3BSD, C89 にも準拠している。
バグ
glibc 2.9 とそれ以前のバージョンでは、極エラーが発生した場合、POSIX で要求されている
ERANGE ではなく
EDOM が
errno に設定される。バージョン 2.10 以降の glibc では、正しい動作をする。
x が負の場合、大きな正負の値の
y が与えられると、関数の結果が NaN となり、
errno に
EDOM が設定され、不正浮動小数点例外 (
FE_INVALID) が発生する。例えば、
pow() では、
y の絶対値が約 9.223373e18 より大きい場合にこの状況となる。
glibc バージョン 2.3.2 以前では、アンダーフローやアンダーフローのエラーが発生する場合、 glibc の
pow() は、オーバーフロー例外やアンダーフロー例外を上げるだけでなく、不正浮動小数点例外 (
FE_INVALID) を間違って発生する。
関連項目
cbrt(3),
cpow(3),
sqrt(3)
この文書について
この man ページは Linux
man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。