Рубрики

Бахшалинское приближение для вычисления квадратных корней

Аппроксимация Бакшали — это математический метод нахождения аппроксимации квадратного корня числа. Это эквивалентно двум итерациям вавилонского метода .

Алгоритм:

To calculate sqrt(S).

Step 1: Calculate nearest perfect square to S i.e (N2).

Step 2: Calculate d = S - (N2)

Step 3: Calculate P = d/(2*N)

Step 4: Calculate A = N + P

Step 5: Sqrt(S) will be nearly equal to A - (P2/2*A)

Ниже приведена реализация вышеуказанных шагов.

Реализация:

C ++

// Эта программа выдает результат с точностью до 5 знаков после запятой.
#include <iostream>

  

float sqroot(float s)

{

    int pSq = 0; // Это будет ближайший к s идеальный квадрат

    int N = 0; // Это площадь pSq

  

    // Находим ближайший идеальный квадрат к с

    for (int i = static_cast<int>(s); i > 0; i--)

    {

        for (int j = 1; j < i; j++)

        {

            if (j*j == i)

            {

                pSq = i;

                N = j;

                break;

            }

        }

        if (pSq > 0)

            break;

    }

  

    float d = s - pSq;     // вычислить d

    float P = d/(2.0*N);  // вычисляем P

    float A = N+P;     // вычислить A

    float sqrt_of_s = A-((P*P)/(2.0*A));   // вычисляем sqrt (S).

    return sqrt_of_s;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main()

{

    float num = 9.2345;

    float sqroot_of_num = sqroot(num);

    std::cout << "Square root of  "<<num<<" = "<<sqroot_of_num;

    return 0;

}

Джава

// Java-программа дает приближенный результат
// до 5 десятичных знаков.

  

class GFG 

{

    static float sqroot(float s)

    {

        // Это будет ближайший к s идеальный квадрат

        int pSq = 0;

          

        // Это площадь pSq

        int N = 0

      

        // Находим ближайший идеальный квадрат к с

        for (int i = (int)(s); i > 0; i--)

        {

            for (int j = 1; j < i; j++)

            {

                if (j*j == i)

                {

                    pSq = i;

                    N = j;

                    break;

                }

            }

            if (pSq > 0)

                break;

        }

          

        // вычислить d

        float d = s - pSq;     

          

        // вычисляем P

        float P = d/(2.0f*N); 

          

        // вычислить A

        float A = N+P; 

           

        // вычисляем sqrt (S).

        float sqrt_of_s = A-((P*P)/(2.0f*A));

        return sqrt_of_s;

    }

      

    // Драйвер программы

    public static void main (String[] args) 

    {

        float num = 9.2345f;

        float sqroot_of_num = sqroot(num);

        System.out.print("Square root of "+num+" = "

                         + Math.round(sqroot_of_num*100000.0)/100000.0);

    }

}

  
// Этот код предоставлен Anant Agarwal.

python3

# Эта программа на Python3 дает результат
# приблизительно до 5 знаков после запятой.

def sqroot(s):

  

    # Это будет ближайший

    # идеальный квадрат с

    pSq = 0

      

    # Это площадь pSq

    N = 0

  

    # Найти ближайший

    # идеальный квадрат с

    for i in range(int(s), 0, -1):

        for j in range(1, i):

            if (j * j == i):

                pSq = i;

                N = j;

                break;

      

        if (pSq > 0):

            break;

  

    d = s - pSq;     # рассчитать д

    P = d / (2.0 * N); # рассчитать P

    A = N + P; # рассчитать

      

    # рассчитать sqrt (S).

    sqrt_of_s = A - ((P * P) / (2.0 * A)); 

    return sqrt_of_s;

  
Код водителя

num = 9.2345;

sqroot_of_num = sqroot(num);

print("Square root of ", num, "="

      round((sqroot_of_num * 100000.0) / 100000.0, 5));

  
# Этот код предоставлен mits

C #

// C # программа выдает результат, приближенный
// до 5 десятичных знаков.

using System;

  

class GFG {

      

    static float sqroot(float s)

    {

          

        // Это будет ближайший

        // идеальный квадрат в с

        int pSq = 0;

          

        // Это площадь pSq

        int N = 0; 

      

        // Находим ближайший идеальный квадрат к с

        for (int i = (int)(s); i > 0; i--)

        {

            for (int j = 1; j < i; j++)

            {

                if (j * j == i)

                {

                    pSq = i;

                    N = j;

                    break;

                }

            }

              

            if (pSq > 0)

                break;

        }

          

        // вычислить d

        float d = s - pSq;     

          

        // вычисляем P

        float P = d / (2.0f * N); 

          

        // вычислить A

        float A = N + P; 

          

        // вычисляем sqrt (S).

        float sqrt_of_s = A-((P * P) / (2.0f * A));

        return sqrt_of_s;

    }

      

    // Код драйвера

    public static void Main () 

    {

        float num = 9.2345f;

        float sqroot_of_num = sqroot(num);

        Console.Write("Square root of "+num+" = "

                       Math.Round(sqroot_of_num * 100000.0) / 

                                                  100000.0);

    }

}

  
// Этот код предоставлен Нитином Митталом.

PHP

<?php
// Эта программа PHP дает результат
// приблизительно до 5 знаков после запятой.

function sqroot($s)

{

    // Это будет ближайший

    // идеальный квадрат в с

    $pSq = 0; 

      

    // Это площадь pSq

    $N = 0; 

  

    // Найти ближайший

    // идеальный квадрат в с

    for ($i = intval($s); $i > 0; $i--)

    {

        for ($j = 1; $j < $i; $j++)

        {

            if ($j * $j == $i)

            {

                $pSq = $i;

                $N = $j;

                break;

            }

        }

        if ($pSq > 0)

            break;

    }

  

    $d = $s - $pSq;     // вычислить d

    $P = $d / (2.0 * $N); // вычисляем P

    $A = $N + $P;     // вычислить A

      

    // вычисляем sqrt (S).

    $sqrt_of_s = $A - (($P * $P) / 

                       (2.0 * $A)); 

    return $sqrt_of_s;

}

  
// Код драйвера

$num = 9.2345;

$sqroot_of_num = sqroot($num);

echo "Square root of ". $num ." = "

              round(($sqroot_of_num

                          100000.0) / 

                        100000.0, 5);

  
// Этот код предоставлен Sam007
?>

Выход :

Square root of 9.2345 = 3.03883

Иллюстрация:

find sqrt(9.2345)

S = 9.2345

N = 3
 
d = 9.2345 – (3^2) = 0.2345

P = 0.2345/(2*3) = 0.0391

A = 3 + 0.0391  = 3.0391

therefore, sqrt(9.2345) = 3.0391 – (0.0391^2/(2*0.0391)) = 3.0388

Важные моменты:

  • Используется для нахождения приближения к квадратному корню.
  • Требуется значение ближайшего идеального квадрата числа, квадратный корень которого необходимо вычислить.
  • Более эффективно для чисел с плавающей запятой, чем целых чисел, поскольку находит аппроксимацию.

Ссылка:
https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Bakhshali_approximation

Эта статья предоставлена Суровым Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Бахшалинское приближение для вычисления квадратных корней

0.00 (0%) 0 votes