C言語

【C言語】ルート(平方根)の計算


プログラミング初心者向けの練習問題として「ルート(平方根)の計算」があります。

今回はそのプログラムの作成方法について解説します。

実際にプログラムを作成してみる

早速ですが、実際にプログラムを作成していきます。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 任意の数値Nを入力させる
  2. sqrt関数を利用してNの平方根を計算する

※ sqrt関数を利用するには #include <math.h> の記述が必要なので注意して下さい。

実装例

上記の手順に従ってプログラムを作成します。

#include <stdio.h>
#include <math.h>

int main(void){

  /* 変数を定義する */
  int n;

  /* 数値の入力を促すメッセージを表示 */
  printf("Enter the number : \n");
  scanf("%d", &n);
  printf("\n");

  /* sqrt関数を利用して平方根の計算を行う */
  printf("sqrt(n) = %lf\n", sqrt(n));

  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

Enter the number : 
2

sqrt(n) = 1.414214

計算結果から適切に計算できていることがわかります。

sqrt関数を利用しないプログラム

先程はsqrt関数を利用してルート(平方根)の計算を実装しましたが、sqrt関数を利用しなくてもこの計算は実現可能です。

具体的には、ニュートン法という計算手法を利用します。ニュートン法について詳しく知りたい方は以下のページを参照して下さい。

>>ニュートン法 – Wikipedia

※ ここで説明するには長くなり過ぎてしまうので省略させて頂きます。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 任意の数値Nを入力させる
  2. ニュートン法を利用してNの平方根を計算する

実装例

上記の手順に従ってプログラムを作成します。

#include <stdio.h>

int main(void){

  /* 変数を定義する */
  double x, y, n;

  /* 数値の入力を促すメッセージを表示 */
  printf("Enter the number : \n");
  scanf("%lf", &n);
  printf("\n");

  /* ニュートン法を利用して平方根の計算を行う */
  x = 1;
  while(1){
    printf("x = %lf, x*x = %lf\n", x, x*x);
    x = x - (x*x - n) / (2 * x);
    y = x*x - n;
    if ((y <= 0.00000001) && (y >= -0.00000001)){
      break;
    }
  }
  printf("\n");
  printf("sqrt(n) = %lf\n", x);

  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

Enter the number : 
2

x = 1.000000, x*x = 1.000000
x = 1.500000, x*x = 2.250000
x = 1.416667, x*x = 2.006944
x = 1.414216, x*x = 2.000006

sqrt(n) = 1.414214

計算結果から適切に計算できていることがわかります。