Newton aproximation de la racine

Fermé
Halima - Modifié le 27 nov. 2019 à 18:29
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 27 nov. 2019 à 20:23
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

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié le 27 nov. 2019 à 20:30
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