Cライブラリ関数 -pow()
説明
Cライブラリ関数double pow(double x, double y)返すxのy乗、つまり xy。
pow()は C標準ライブラリ<math.h>の中の関数で、数値の累乗を計算します。具体的には、最初の引数の2番目の引数乗を返します。すなわち、x^y。
宣言
以下は pow() 関数の宣言です。
#include <math.h> double pow(double x, double y); float powf(float x, float y); long double powl(long double x, long double y);
パラメータ
x基数(底)、浮動小数点数。y指数、浮動小数点数。
戻り値
- 返す
xのy乗、すなわちx^y。 - 計算で数学的エラーが発生した場合、例えば負の数の非整数乗などでは、NaN を返し、設定します
errno。
エラー処理
- もし
xが負で、yが整数でない場合、結果は NaN となり、errnoに設定されますEDOM。 - 結果が大きすぎてオーバーフローした場合、返す
HUGE_VAL,errnoに設定されますERANGE。 - 結果が小さすぎてアンダーフローした場合、返す
0.0,errnoに設定されますERANGE。
例
以下の例は pow() 関数の使い方を示しています。
例
#include <stdio.h>
#include <math.h>
int main ()
{
printf("値 8.0 ^ 3 = %lf\n", pow(8.0, 3));
printf("値 3.05 ^ 1.98 = %lf", pow(3.05, 1.98));
return(0);
}
#include <math.h>
int main ()
{
printf("値 8.0 ^ 3 = %lf\n", pow(8.0, 3));
printf("値 3.05 ^ 1.98 = %lf", pow(3.05, 1.98));
return(0);
}
上記のプログラムをコンパイルして実行すると、次の結果が得られます:
值 8.0 ^ 3 = 512.000000 值 3.05 ^ 1.98 = 9.097324
複数の累乗計算を処理する
次の例では、複数の基数と指数の累乗計算を処理する方法を示します:
例
#include <stdio.h>
#include <math.h>
#include <errno.h>
int main() {
double bases[] = {2.0, -2.0, 0.0, 2.0};
double exponents[] = {3.0, 3.0, 0.0, -2.0};
int num_values = sizeof(bases) / sizeof(bases[0]);
for (int i = 0; i < num_values; i++) {
double x = bases[i];
double y = exponents[i];
errno = 0; // errno をリセット
double result = pow(x, y);
if (errno == EDOM) {
printf("Domain error: pow(%f, %f) is not defined\n", x, y);
} else if (errno == ERANGE) {
if (result == HUGE_VAL || result == -HUGE_VAL) {
printf("Range error: pow(%f, %f) results in overflow\n", x, y);
} else {
printf("Range error: pow(%f, %f) results in underflow\n", x, y);
}
} else {
printf("pow(%f, %f) = %f\n", x, y, result);
}
}
return 0;
}
#include <math.h>
#include <errno.h>
int main() {
double bases[] = {2.0, -2.0, 0.0, 2.0};
double exponents[] = {3.0, 3.0, 0.0, -2.0};
int num_values = sizeof(bases) / sizeof(bases[0]);
for (int i = 0; i < num_values; i++) {
double x = bases[i];
double y = exponents[i];
errno = 0; // errno をリセット
double result = pow(x, y);
if (errno == EDOM) {
printf("Domain error: pow(%f, %f) is not defined\n", x, y);
} else if (errno == ERANGE) {
if (result == HUGE_VAL || result == -HUGE_VAL) {
printf("Range error: pow(%f, %f) results in overflow\n", x, y);
} else {
printf("Range error: pow(%f, %f) results in underflow\n", x, y);
}
} else {
printf("pow(%f, %f) = %f\n", x, y, result);
}
}
return 0;
}
上記のプログラムをコンパイルして実行すると、次の結果が得られます:
pow(2.000000, 3.000000) = 8.000000 pow(-2.000000, 3.000000) = -8.000000 pow(0.000000, 0.000000) = 1.000000 pow(2.000000, -2.000000) = 0.250000
コード解説
- 2つの配列を定義します
basesとexponentsそれぞれ複数の基数と指数を含みます。 - を使用
forループで各基数と指数のペアを反復処理し、呼び出しますpow(x, y)累乗計算を行います。 - リセット
errnoを 0 にして、可能性のあるエラーを確認します。 - 各計算の結果またはエラーメッセージを出力します。
使用シナリオ
pow()関数は多くのアプリケーションで広く使用されており、以下に限定されません:
- 科学式の累乗演算の計算。
- 累乗方程式を含む数学的問題の解決。
- 金融における複利の計算。
- 工学におけるさまざまな物理計算。
まとめ
pow()関数は浮動小数点数の累乗を計算するために使用され、累乗演算を処理するための重要なツールです。適切に使用することで、pow()科学計算、工学アプリケーション、金融分析での累乗演算を実現し、可能性のあるエラーを適切に処理することができます。