2010-06-16 8 views

Odpowiedz

10

Prawdopodobnie będziesz musiał skorzystać z metody przybliżania.

Wystarczy popatrzeć na

Methods of computing square roots

+1

+1 dla linku – INS

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odniesienia . Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ review/low-quality-posts/18304161) –

7

Oto coś do myślenia:

Aby znaleźć pierwiastek kwadratowy, wystarczy znaleźć numer, który podniesiony do potęgi 2 (chociaż samo mnożenie samo w sobie jest o wiele łatwiejsze programowo;)) oddaje dane wejściowe.

Zacznij więc od zgadywania. Jeśli produkt jest zbyt mały, zgadnij, że jest większy. Jeśli nowy produkt jest zbyt duży, zawęziłeś go - zgadnij gdzieś pomiędzy. Widzisz, dokąd zmierzam ...

W zależności od potrzeby precyzji i/lub wydajności, istnieje oczywiście wiele sposobów. Rozwiązanie zasugerowane w tym poście nie jest w żaden sposób najlepsze w żadnej z tych kategorii, ale daje ci wskazówkę w jeden sposób.

+0

To zajmie dużo przetwarzania! – ivorykoder

+0

@ivorykoder: Pewnie, że tak. Ale istnieje wiele metod inteligentnego wyboru następnego spekulowania, aby szybko zmniejszyć rozmiar interwału - głównie sprowadza się to do możliwości wykluczenia jak największej liczby pozostałych interwałów, bez względu na to, po której stronie odgadnięcia jest odpowiedź. w. –

5

Jeden że wynalazku (lub na nowo, gdy w zależności od przypadku) jest następująca:

Następnie Guess = ((Guess) + N)/(2 x chyba)

Przykład:

pierwiastek z 10 pierwsze przypuszczenie jest, powiedzmy, 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... 

itp

dostaje 3.16227766 ... lub w tej okolicy.

To jest rzeczywiście uproszczona wersja mojej oryginalnej metodzie

Guess + ((N + Guess)/(2 x Guess))

który wygląda strasznie dużo jak Bakhshali's method.

7

Ta wersja wykorzystuje metodę Newtona, najczęstszą metodę obliczania sqrt, i nie sprawdza, czy dane wejście jest rzeczywiście liczbą całkowitą, ale powinno rozwiązać problem w porządku.

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)); 

Druga linia sprawdza jak blisko prąd przypuszczenie jest do prawdziwego związku, a jeśli wystarczająco blisko przerywa pętlę.Trzecia linia wykorzystuje metodę Newtona, aby zbliżyć się do rzeczywistej wartości sqrt. Mam nadzieję, że to pomoże. :)

12

program Java, aby dowiedzieć się pierwiastek kwadratowy z danej liczby bez użycia żadnych wbudowanych funkcji

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"); 
    } 

    } 
} 
Powiązane problemy