Newton aproximation de la racine

Halima -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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.
0