web-dev-qa-db-fra.com

Comment puis-je calculer la racine carrée d'un nombre sans utiliser les fonctions intégrées?

comment puis-je créer une méthode qui retourne le sqrt d'un nunber donné?

Par exemple: sqrt (16) renvoie 4 et sqrt (5) renvoie 2,3 ...
J'utilise Java et je connais la fonction API Math.sqrt() mais j'ai besoin de la méthode elle-même.

14
dato datuashvili

Programme Java pour trouver la racine carrée d'un nombre donné sans utiliser de fonctions intégrées

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

  }
}
12

Vous devrez probablement utiliser une méthode d'approximation.

Jettes un coup d'oeil à

Méthodes de calcul des racines carrées

11
Adriaan Stander

Cette version utilise la méthode de Newton, la méthode la plus courante de calcul de sqrt, et ne vérifiera pas que l'entrée est en fait un entier, mais cela devrait résoudre votre problème très bien.

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

La deuxième ligne vérifie à quel point la supposition actuelle est proche du vrai résultat et si suffisamment proche rompt la boucle. La troisième ligne utilise la méthode de Newton pour se rapprocher toujours plus de la vraie valeur du sqrt. J'espère que ça aide. :)

8
democidist

Voici quelque chose à penser:

Pour trouver une racine carrée, il vous suffit de trouver un nombre qui, élevé à la puissance de 2 (bien que la simple multiplication par lui-même soit beaucoup plus facile par programmation;)) renvoie l'entrée.

Alors, commencez par une supposition. Si le produit est trop petit, devinez plus grand. Si le nouveau produit est trop grand, vous l'avez réduit - devinez quelque part entre les deux. Vous voyez où je vais ...

En fonction de votre besoin de précision et/ou de performance, il existe bien sûr de nombreuses façons. La solution suggérée dans ce post n'est en aucun cas la meilleure dans l'une ou l'autre de ces catégories, mais elle vous donne un indice sur la voie à suivre.

7
Tomas Aschan

Celui que j'ai inventé (ou réinventé le cas échéant) est le suivant:

Devinez suivant = ((Devinez2) + N)/(2 × Devinez)

Exemple:

Racine carrée de 10, la première supposition est, disons, 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...

etc.

Vous obtient 3.16227766... ou à peu près.

Il s'agit en fait d'un version simplifiée de ma méthode d'origine

Devinez + ((N + Devinez2 )/(2 × Devinez))

qui ressemble énormément à méthode de Bakhshali .

5
Morgan