このページでは、C言語の標準ライブラリ関数である sqrt
関数と cbrt
関数について紹介していきます。
これらの関数を利用することで、下記を求めることができます。
sqrt
関数:平方根(2乗根)cbrt
関数:立方根(3乗根)
Contents
sqrt
関数:平方根(2乗根)を求める
まずは sqrt
関数を紹介していきます。
sqrt
関数
sqrt
関数は、引数で与えられる数の平方根を求める関数になります。使用する際には math.h
をインクルードしておく必要があります。
#include <math.h>
double sqrt(double x);
sqrt
は引数 x
の平方根となる値を返却します。
非常にシンプルな関数ですが、厳密に考えると cbrt
関数よりもちょっとだけややこしく、ちょっとした注意点があります。
スポンサーリンク
引数には 0
以上の値を指定
まず、sqrt
関数が求める平方根はあくまでも実数の範囲の値となります。複素数までは求めてくれません。
そのため、sqrt
関数の引数に 0
未満の値を指定した場合は解なしとなります。私の環境だと nan
が返却されました。
そのため、まともに2乗根を求めたいのであれば、sqrt
関数の引数には 0
以上の値を指定してください。
返却値は “正” の平方根
正の数(0
を超える実数)に対する平方根は必ず2つ存在します。例えば 4
の平方根は +2
と -2
の2つになります。
要は、正の数には絶対値の等しい正の値と負の値の平方根が存在します。
ただし、引数に正の数を指定した場合でも sqrt
関数が返却してくれるのは1つの平方根のみで、正の平方根の方を返却することになります。
ですので、例えば2つの平方根の両方を求めたい場合や負の平方根を求めたい場合は、sqrt
関数の呼び出し側で返却値の符号を反転する処理が必要になります。
sqrt
関数の使用例
下記は sqrt
関数の使用例となります。
正の平方根と負の平方根が存在する場合は、その両方を表示するようにしています。
#include <stdio.h>
#include <math.h>
int main(void) {
double x;
printf("x = ");
scanf("%lf", &x);
double plus = sqrt(x);
if (x != 0) {
printf("ans1 = %f\n", plus);
printf("ans2 = %f\n", -plus);
} else {
printf("ans = %f\n", plus);
}
return 0;
}
実行して 0
を入力すれば 0.0
のみが平方根として表示されますし、
x = 0 ans = 0.000000
4
などの正数を入力すれば、2つの平方根が表示されます。
x = 4 ans1 = 2.000000 ans2 = -2.000000
スポンサーリンク
sqrtf
関数と sqrtl
関数
同じ平方根を計算する関数として sqrtf
や sqrtl
が存在します。sqrt
とは引数と返却値の型が異なります。
#include <math.h>
float sqrtf(float x);
long double sqrtl(long double x);
cbrt
関数:立方根(3乗根)を求める
続いて cbrt
関数を紹介していきます。
cbrt
関数
cbrt
関数は、引数で与えられる数の立方根を求める関数になります。sqrt
関数同様、使用する際には math.h
をインクルードしておく必要があります。
#include <math.h>
double cbrt(double x);
cbrt
関数は引数 x
の立方根となる値を返却します。
sqrt
関数とは異なり引数 x
に負の数を指定しても、正常な立方根を返却値として得ることができます。
スポンサーリンク
cbrt
関数の使用例
下記は cbrt
関数の使用例となります。
cbrt
関数の返却値の3乗の値を求めることで、ほぼ引数に指定した値と同じ結果が得られることを確認するソースコードになります。
#include <stdio.h>
#include <math.h>
int main(void) {
for (double x = 0.0; x < 10.0; x+=1.0) {
double ans = cbrt(x);
printf("%f : %f\n", x, ans * ans * ans);
}
return 0;
}
実行結果は下記のようになります。左側には引数に指定した値、右側には cbrt
関数の返却値を3乗した値を表示しています。
両者で全く同じ結果になっているように見えますが、実際には誤差が発生して若干の差があります。
0.000000 : 0.000000 1.000000 : 1.000000 2.000000 : 2.000000 3.000000 : 3.000000 4.000000 : 4.000000 5.000000 : 5.000000 6.000000 : 6.000000 7.000000 : 7.000000 8.000000 : 8.000000 9.000000 : 9.000000
cbrtf
関数と cbrtl
関数
同じ立方根を計算する関数として cbrtf
や cbrtl
が存在します。cbrt
とは引数と返却値の型が異なります。
#include <math.h>
float cbrtf(float x);
long double cbrtl(long double x);
N
乗根も求められる?
ここまで紹介してきた sqrt
関数と cbrt
関数はそれぞれ平方根(2乗根)と立方根(3乗根)を求める関数でした。
では、C言語では平方根と立方根以外の冪根、いわゆる「N
乗根」を求めることはできないのでしょうか?
ちょっとここまでと異なる傾向の関数を利用することになりますが、N
乗根もC言語で求めることが可能です。
その具体的な方法については下記ページで解説していますので、興味のある方はこちらもぜひ読んでみてください。
【C言語】N乗根を求める方法スポンサーリンク
まとめ
このページでは、C言語の標準ライブラリ関数である sqrt
関数と cbrt
関数の紹介を行いました!
これらの関数を用いることで、引数に指定した数の平方根や立方根を求めることが可能です!
平方根については求める機会も多いと思いますので、特に sqrt
関数は覚えておくと良いと思います。例えば分散から標準偏差を求めるような場合や、直角三角形の斜辺の長さを求めるような場合にも活躍します。
また、N
乗根を求める方法については下記ページで解説していますので、こちらもぜひ読んでみてください!
さらに、逆に N
乗を求める方法については下記ページで解説していますので、こちらも興味があればどうぞ!