Loi Binomial

Résolu
nazorayzer Messages postés 4 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 5 décembre 2015 - Modifié par NHenry le 4/12/2015 à 19:43
nazorayzer Messages postés 4 Date d'inscription lundi 20 avril 2015 Statut Membre Derniè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

Merci d'y penser dans tes prochains messages.

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
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...
1
nazorayzer Messages postés 4 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 5 décembre 2015
5 déc. 2015 à 00:00
mercii bieen c'est résolu ;)
0
Rejoignez-nous