2014-06-06 4 views
0

Je veux faire un programme qui utilise l'algorithme de Babylone pour calculer la racine carrée d'un nombre positif n comme suit:algorithme de Babylone en Java

  1. faire une proposition à la réponse (vous pouvez choisir n/2 comme estimation initiale).
  2. Calculer r = n/deviner.
  3. Définir deviner = (deviner + r)/2
  4. Revenir à l'étape 2 jusqu'à ce que les deux dernières valeurs de présélection se situent à moins de 1% l'une de l'autre.

Maintenant c'est mon code. Comment puis-je faire en sorte que la boucle cesse d'itérer lorsque la valeur de la supposition est inférieure à 1% de la valeur précédente? Je ne comprends pas la partie "devine est dans 1% de la supposition précédente".

+0

Gardez une trace de la dernière estimation en utilisant une autre variable et calculer la différence de% ((-dernier courant)/dernier) * 100 et de briser quand il est inférieur à .01 –

Répondre

2

Cela devrait faire l'affaire:

double n = input.nextDouble(); 
double guess = n/2; 

double pctDiff = Double.MAX_VALUE; 
double lastGuess = guess; 

    while (Math.abs(pctDiff) >= 0.01) 
    {       
     double r = n/guess; 
     guess = (guess + r)/2; 
     pctDiff = ((guess-lastGuess)/lastGuess); // normally, multiply by 100, but don't need to necessarily... 
     lastGuess = guess; 
     System.out.println(guess); 

    } 
+0

La différence en pourcentage ne devrait-elle pas être (grand nombre - petit nombre)/grand nombre? Dans votre code lastGuess est toujours le plus petit. –

+0

n'a pas d'importance, le résultat est calculé en tant que valeur absolue. La formule telle qu'écrite fournit un% de changement, qui peut être négatif. –

+0

J'ai compris. Je vous remercie :) –

0

Stocke les estimations précédentes et actuelles dans des variables séparées. Alors simplement avoir une instruction if pour vérifier à quelle distance votre currentGuess est de previousGuess.

+0

Je mettrais définitivement la vérification dans l'état de la boucle while plutôt que dans une instruction if: alors que les boucles sans condition sont rarement bonnes. – dwarduk

Questions connexes