Newton aproximation de la racine
Halima
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
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 :
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:
- Racine carré java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Racine carré sur mac - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
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.
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.