【C言語】sqrt関数で平方根・cbrt関数で立方根を求める(ルート計算)

sqrt関数とcbrt関数の解説ページアイキャッチ

このページでは、C言語の標準ライブラリ関数である sqrt 関数と cbrt 関数について紹介していきます。

これらの関数を利用することで、下記を求めることができます。

  • sqrt 関数:平方根(2乗根)
  • cbrt 関数:立方根(3乗根)

sqrt 関数:平方根(2乗根)を求める

まずは sqrt 関数を紹介していきます。

sqrt 関数

sqrt 関数は、引数で与えられる数の平方根を求める関数になります。使用する際には math.h をインクルードしておく必要があります。

sqrt関数

#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 関数の使用例となります。

正の平方根と負の平方根が存在する場合は、その両方を表示するようにしています。

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 関数

同じ平方根を計算する関数として sqrtfsqrtl が存在します。sqrt とは引数と返却値の型が異なります。

sqrtf・sqrtl関数

#include <math.h>

float sqrtf(float x);
long double sqrtl(long double x);

cbrt 関数:立方根(3乗根)を求める

続いて cbrt 関数を紹介していきます。

cbrt 関数

cbrt 関数は、引数で与えられる数の立方根を求める関数になります。sqrt 関数同様、使用する際には math.h をインクルードしておく必要があります。

cbrt関数

#include <math.h>

double cbrt(double x);

cbrt 関数は引数 x の立方根となる値を返却します。

sqrt 関数とは異なり引数 x に負の数を指定しても、正常な立方根を返却値として得ることができます。

スポンサーリンク

cbrt 関数の使用例

下記は cbrt 関数の使用例となります。

cbrt 関数の返却値の3乗の値を求めることで、ほぼ引数に指定した値と同じ結果が得られることを確認するソースコードになります。

cbrt関数の使用例

#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 関数

同じ立方根を計算する関数として cbrtfcbrtl が存在します。cbrt とは引数と返却値の型が異なります。

cbrtf・cbrtl関数

#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言語】N乗根を求める方法

スポンサーリンク

まとめ

このページでは、C言語の標準ライブラリ関数である sqrt 関数と cbrt 関数の紹介を行いました!

これらの関数を用いることで、引数に指定した数の平方根や立方根を求めることが可能です!

平方根については求める機会も多いと思いますので、特に sqrt 関数は覚えておくと良いと思います。例えば分散から標準偏差を求めるような場合や、直角三角形の斜辺の長さを求めるような場合にも活躍します。

また、N 乗根を求める方法については下記ページで解説していますので、こちらもぜひ読んでみてください!

C言語でN乗根を求める方法の解説ページアイキャッチ【C言語】N乗根を求める方法

さらに、逆に N 乗を求める方法については下記ページで解説していますので、こちらも興味があればどうぞ!

C言語でべき乗計算および累乗計算を行う方法の解説ページアイキャッチ【C言語】べき乗計算・累乗計算を行う方法(pow関数)

同じカテゴリのページ一覧を表示