C++ でバビロニア法を使用して平方根を求める

Saad Aslam 2023年10月12日
  1. C++ でのバビロニア メソッドの概要
  2. C++ で平方根を求めるバビロニア法を実装する
C++ でバビロニア法を使用して平方根を求める

この記事で説明するバビロニアのアプローチを使用して、C++ プログラミング言語で整数の平方根を決定する方法を学習します。

C++ でのバビロニア メソッドの概要

数値の平方根を決定するためのバビロニアの手法は、非線形方程式を解くためのニュートン ラフソン法から派生した数値法の 1つから派生しています。

この手順は、次のアルゴリズムのバリエーションとして要約できます。

  1. まず、正の数を無作為に選択し、可能な限り根に近い値を取得します。
  2. y = 1 と言って変数に値 1 を代入することから始めます。
  3. 次の 2つの段階の指示に従って、答えが得られるポイントに到達します。
    • xy の平均を求め、根の近似値を計算します。
    • y = n/x. を設定します。

前のセクションの手順をループで繰り返し続けるとします。 その場合、問題を解決するためにバビロニアの手法を利用しながら、最終的には数自体の平方根に到達します。

C++ で平方根を求めるバビロニア法を実装する

別のクラスを使用してバビロニアのアプローチを適用して数値の平方根を求める例を見てみましょう。

まず、アプリケーションに必要なライブラリをインポートします。

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

#include <iostream>

float データ型値を持つ sqNumber パラメータを受け入れる sqRootBySaad と呼ばれる float 型メソッドを開発します。

float sqRootBySaad(float sqNumber) {}

このメソッドの本体では、最初に 3つの変数の値を設定する必要があります: valueguess,constantValue.value 変数に割り当てられる値は、引数としてこれに提供される数値になります。

guess 変数の値は one, に設定され、constantValuezero. に設定されます。

float value = sqNumber;
float guess = 1;
float constantValue = 0;

この後、while ループを適用して、value - guess 値が constantValue より大きいかどうかを確認します。 次に、valueguess の両方の値の平均を計算し、sqNumbervalue で割ります。

この後、while ループを使用して、value - guess の値が constantValue. の値より大きいかどうかを確認します。 そうであれば、valueguess 値の両方の平均を計算します。

さらに、sqNumber を先ほど終了した計算で割り、value 変数に保存します。

while (value - guess > constantValue) {
  value = (value + guess) / 2;
  guess = sqNumber / value;
}

sqRootBySaadvalue 変数を返します。

return value;

平方根を見つけるための手順を作成したので、main(). という関数で int 型の anyNumber という名前の変数を定義する必要があります。 平方根を計算できるように数値を送信するように求めるメッセージをユーザーに表示し、数値に対するユーザーの入力を取得します。

ここで、メソッド sqRootBySaad を呼び出し、変数 anyNumber. に以前に保存された数値を提供します。

int main() {
  int anyNumber;
  cout << "Enter any number to find square root: ";
  cin >> anyNumber;
  cout << "Square root using Babylonian method is: " << sqRootBySaad(anyNumber);
  return 0;
}

完全なソース コード:

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

#include <iostream>

using namespace std;

float sqRootBySaad(float sqNumber) {
  float value = sqNumber;
  float guess = 1;
  float constantValue = 0;

  while (value - guess > constantValue) {
    value = (value + guess) / 2;
    guess = sqNumber / value;
  }
  return value;
}

int main() {
  int anyNumber;
  cout << "Enter any number to find square root: ";
  cin >> anyNumber;
  cout << "Square root using Babylonian method is: " << sqRootBySaad(anyNumber);
  return 0;
}

出力:

Enter any number to find square root: 25
Square root using Babylonian method is: 5

数の平方根を見つけるためにバビロニアのアプローチを適用する追加の例を見てみましょう。

ここでは、データ型 double. の 3つの変数 valueguess,sqNumber を初期化します。

数値の平方根を計算できるように数値を送信するように求めるメッセージをユーザーに表示し、ユーザーが提供する値を入力します。

double value, guess, sqNumber;

cout << "Please enter a number to find square root using the Babylonian "
        "method: ";
cin >> value;

数値を 2 で割った後、結果を guess. という変数に格納します。 反復回数 10 の for ループを実装し、目的の結果に到達するまでこれを続けます。

for ループ内で、ユーザーが入力した valueguess 値で割り、結果を変数 sqNumber に保存します。 guess 変数の値を更新するには、guess および sqNumber 変数に含まれる平均値を計算する必要があります。

guess = value / 2.0;

for (int n = 0; n <= 10; n++) {
  sqNumber = value / guess;
  guess = (guess + sqNumber) / 2;
}

最後に、ユーザーが入力した値の平方根をとって得られる数値である guess 値を出力します。

cout << "The square root of " << value << " is: " << guess << endl;

完全なソース コード:

#include <iostream>

using namespace std;

int main() {
  double value, guess, sqNumber;
  cout << "Please enter a number to find square root using the Babylonian "
          "method: ";
  cin >> value;

  guess = value / 2.0;

  for (int n = 0; n <= 10; n++) {
    sqNumber = value / guess;
    guess = (guess + sqNumber) / 2;
  }
  cout << "The square root of " << value << " is: " << guess << endl;
}

出力:

Please enter a number to find square root using the Babylonian method: 25
The square root of 25 is: 5
著者: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

関連記事 - C++ Math