C++에서 Babylonian 방법을 사용하여 제곱근 찾기

Saad Aslam 2023년10월12일
  1. C++의 바빌로니아 방식 개요
  2. C++에서 제곱근을 찾는 Babylonian 방법 구현
C++에서 Babylonian 방법을 사용하여 제곱근 찾기

이 기사에서 설명할 Babylonian 접근 방식을 사용하여 C++ 프로그래밍 언어에서 정수의 제곱근을 결정하는 방법을 배웁니다.

C++의 바빌로니아 방식 개요

숫자의 제곱근을 결정하기 위한 바빌로니아 기법은 수치적 방법 중 하나에서 파생되며, 이는 다시 비선형 방정식의 솔루션에 대한 Newton-Raphson 접근 방식에서 파생됩니다.

절차는 다음 알고리즘의 변형으로 요약될 수 있습니다.

  1. 먼저 양수를 무작위로 선택하고 가능한 한 루트에 가깝게 가져옵니다.
  2. y = 1이라고 말하여 값 1을 변수에 할당하는 것으로 시작합니다.
  3. 답을 얻은 지점에 도달할 때까지 다음 두 단계의 지침을 따르십시오.
    • xy의 평균을 찾은 다음 루트에 대한 근사치를 계산합니다.
    • y = n/x.로 설정합니다.

루프에서 이전 섹션의 절차를 계속 반복한다고 가정합니다. 이 경우 바빌로니아 기법을 사용하여 문제를 해결하면서 결국 숫자 자체의 제곱근에 도달하게 됩니다.

C++에서 제곱근을 찾는 Babylonian 방법 구현

별도의 클래스를 사용하여 숫자의 제곱근을 찾는 데 바빌로니아 방식을 적용하는 예를 살펴보겠습니다.

시작하려면 응용 프로그램에 필요한 라이브러리를 가져옵니다.

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

#include <iostream>

float 데이터 유형 값이 있는 sqNumber 매개변수를 허용하는 sqRootBySaad라는 float 유형 메소드를 개발하십시오.

float sqRootBySaad(float sqNumber) {}

이 메서드의 본문에서 먼저 세 가지 변수의 값을 설정해야 합니다. value guess,constantValue.. value 변수에 할당된 값은 여기에 인수로 제공된 숫자입니다.

guess 변수의 값은 1로 설정되고 constantValue0으로 설정됩니다.

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.의 세 변수 value, guess,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 변수의 값을 업데이트하려면 guesssqNumber 변수에 포함된 평균 값을 계산해야 합니다.

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