Как вычислить квадратный корень из числа без использования встроенных функций?

как я могу создать метод, который возвращает sqrt данного nunber?

Например: sqrt (16) возвращает 4 и sqrt (5) возвращает 2.3...
Я использую Java и знаю функцию API Math.sqrt(), но мне нужен сам метод.

Ответ 1

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

public class Sqrt
{

  public static void main(String[] args)
  {
    //Number for which square root is to be found
    double number = Double.parseDouble(args[0]);

    //This method finds out the square root
    findSquareRoot(number);

}

/*This method finds out the square root without using
any built-in functions and displays it */
public static void findSquareRoot(double number)
{

    boolean isPositiveNumber = true;
    double g1;

    //if the number given is a 0
    if(number==0)
    {
        System.out.println("Square root of "+number+" = "+0);
    }

    //If the number given is a -ve number
    else if(number<0)
    {  
        number=-number;
        isPositiveNumber = false;
    }

    //Proceeding to find out square root of the number
    double squareRoot = number/2;
    do
    {
        g1=squareRoot;
        squareRoot = (g1 + (number/g1))/2;
    }
    while((g1-squareRoot)!=0);

    //Displays square root in the case of a positive number
    if(isPositiveNumber)
    {
        System.out.println("Square roots of "+number+" are ");
        System.out.println("+"+squareRoot);
        System.out.println("-"+squareRoot);
    }
    //Displays square root in the case of a -ve number
    else
    {
        System.out.println("Square roots of -"+number+" are ");
        System.out.println("+"+squareRoot+" i");
        System.out.println("-"+squareRoot+" i");
    }

  }
}

Ответ 3

Вот о чем подумать:

Чтобы найти квадратный корень, вам просто нужно найти число, которое поднято до степени 2 (хотя просто умножение само по себе намного проще программно;)) возвращает результат.

Итак, начните с догадки. Если продукт слишком мал, угадайте больше. Если новый продукт слишком велик, вы его сузили - догадайтесь где-то посередине. Вы видите, куда я иду...

В зависимости от вашей потребности в точности и/или производительности, конечно, есть много способов. Решение, намеченное в этом сообщении, ни в коем случае не является лучшим в любой из этих категорий, но дает вам ключ к одному пути.

Ответ 4

В этой версии используется метод Ньютона, наиболее распространенный метод вычисления sqrt, и не будет проверять, что входной файл на самом деле является целым числом, но он должен решить вашу проблему просто.

int num = Integer.parseInt(input("Please input an integer to be square rooted."));
while(0.0001 < Math.abs(guess * guess - num)){
    guess = (guess + num / guess) / 2;
}
output(Integer.toString(guess));

Вторая строка проверяет, насколько близка текущая догадка к истинному результату, и если достаточно близко разрывает цикл. Третья строка использует метод Ньютона, чтобы стать все ближе к истинному значению sqrt. Надеюсь, это поможет.:)

Ответ 5

Тот, который я изобрел (или заново изобретенный, если это возможно), таков:

Следующее угадывание= ((Guess 2) + N)/(2 × Guess)

Пример:

Квадратный корень 10, сначала предположим, скажем, 10:

Guess1 = (100+10)/20=5.5

Guess2 = (30.25+10)/(2*5.5)= 3.6590909090...

Guess3 = (13.3889+10)/(3.65909090*2)=3.196005082...

и др.

Получает вас 3.16227766... или около того.

На самом деле это упрощенная версия моего оригинального метода

Guess + ((N + Guess 2)/(2 × Guess))

который выглядит ужасно, как метод Бахшали.