Newton aproximation de la racine
Halima
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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 :
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
1 réponse
-
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.