nazorayzer
Messages postés4Date d'inscriptionlundi 20 avril 2015StatutMembreDernière intervention 5 décembre 2015
-
Modifié par NHenry le 4/12/2015 à 19:43
nazorayzer
Messages postés4Date d'inscriptionlundi 20 avril 2015StatutMembreDernière intervention 5 décembre 2015
-
5 déc. 2015 à 00:00
Bonjour,
j'ai essayé de faire ce programme, mais j'ai rencontré un problème c'est le résultat est tjrs NaN
package tp2;
public class Binomial {
public static double factoriel(double x){
double f=0;
if(x==0)
f=1;
else
for(int i=1;i<=x;i++)
f=f*i;
return f;
}
public static double compute(double n,double k){
double c;
c=factoriel(n)/(factoriel(k)*factoriel(n-k));
return c ;
}
public static double generate(int n, float p,double t){
double somme=0;
for(int i=0;i<=t;i++)
somme+=compute(n,i)*Math.pow(p,i)*Math.pow(p-1,n-i);
return somme;
}
public static void main(String args[]){
double binomial;
binomial= generate(5,(float)0.4,8);
System.out.println("Bonimial :"+ binomial);
}
}
EDIT : Ajout des balises de code (la coloration syntaxique). Explications disponibles ici : ICI
KX
Messages postés16701Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention26 mai 2023126 4 déc. 2015 à 20:18
Bonjour,
Lorsque tu fais generate(5, (float) 0.4, 8), tu commences les calculs par un somme += compute(n, i) où n=5, i=0, sachant que compute(5, 0) va faire factoriel(5) / (factoriel(0)*factoriel(5)).
Or dans tes calculs factoriel(0)=1 et factoriel(5) = 0, donc compute(5,0) va faire une division 0/(1*0) c'est à dire 0/0...
Le résultat d'une telle division est inconnue, ce n'est pas un nombre d'où la valeur NaN (Not a Number).
Cette valeur NaN va se propager d'un calcul au suivant (toutes les opérations avec NaN auront pour résultat NaN), d'où ton résultat final.
Sinon, quand on regarde ton code il y a des absurdités assez évidentes, déjà sur le type des variables, une factorielle d'un double n'a pas de sens, le paramètre et le résultat est forcément entier...