【C言語】sqrt関数を使わないで平方根を計算するプログラムの書き方

C言語の標準ライブラリmath.hには平方根ルートを簡単に計算できるsqrt関数が用意されています。

そのため、平方根を求めたいだけなら以下の一行で完了します。

sqrt(12);

ですが、sqrt関数を使わずに平方根を求めるとなるとどうでしょうか。

この場合は自分で平方根を求める数式をプログラム化する必要があります。

平方根の公式を知っているから簡単と思っても、手計算するときは答えを√2のように表記するので、いざプログラム化するとなるとどうすればいいのか分からないという方も多いのではないでしょうか。

今回は、C言語で平方根を計算するプログラムを自作する方法を解説しています。

目次から探す

サンプルコード

こちらは標準ライブラリを一切使わずに平方根を求めるサンプルです。負数対応。

#define E 0.000001 

double my_sqrt(double a)
{
    a = a < 0 ? -a : a;
    double x = a / 2;
    while (1) {
		double e = x * x - a;
		double t = e < 0 ? -e : e;
        if (t < E) return x;
        x -= e / (x * 2);
    }
}

int main() {

    my_sqrt(-4);
    my_sqrt(4);
    my_sqrt(3);
    my_sqrt(-3);

	return 0;
}

平方根を求める方法は複数ありますが、上記サンプルはニュートン法を用いた方法です。

数式の意味を理解するにはプログラミングより数学的な知識が必要なので、数学を専門に扱っている参考書・ウェブサイトを見たほうが手っ取り早いでしょう。

基本的には最適化されているsqrt関数を呼び出す方法がベターですが、どうしてもsqrt関数を自作する必要があるケースでは、上記サンプルを用いるといいでしょう。

目次から探す