Newton aproximation de la racine

Signaler
-
KX
Messages postés
16093
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 décembre 2019
-
Bonjour,
Je suis une débutante en java et je suis en train de faire un petit exercice algorithmique qui calcule la racine d'un nombre 'a' à partir d'une approximation de Newton voici mon code :

public class Newton {
public static double sqrt(double a,int n)
{int i=1;
if(a>0) {
double x = ((1/2) *((1+a)/2)+( (2*a)/((1+a))));
while(i< n)
{x=(1/2)*(x+(a/x));
 i++;
}
return x ; }
else return 0;
}
public static void main(String[] args)
{
 
double d = sqrt(5.0,4);
System.out.println(d  );

}
}
à l'affichage j'ai : NaN c-à-d que le resultat n'est pas un nombre ou " 0.0" ,j'essaye de changer les types ms je n'arrive pas à trouver mon erreur .je souhaite que vous m'aidez et merci d'avance.

Configuration: Windows / Firefox 70.0

2 réponses

Messages postés
16093
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 décembre 2019
2474
Bonjour,

Le problème est que tu divises par 0, ce qui n'a pas de sens mathématique, d'où le résultat NaN.

Dans le détail, il faut regarder les valeurs de x.
Pour a = 5, tu as :
x = ((1 / 2) * ((1 + a) / 2) + ((2 * a) / ((1 + a)))) = 0
x = (1 / 2) * (x + (a / x)) = NaN

Pour corriger ton problème, il faut que tu utilises des double partout car 1/2=0 (ce sont des entiers), or c'est 1.0/2=0.5 dont tu as besoin.