Loi Binomial [Résolu]

nazorayzer 4 Messages postés lundi 20 avril 2015Date d'inscription 5 décembre 2015 Dernière intervention - 4 déc. 2015 à 16:00 - Dernière réponse : nazorayzer 4 Messages postés lundi 20 avril 2015Date d'inscription 5 décembre 2015 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

2 réponses

KX 15438 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 21 mai 2018 Dernière intervention - 4 déc. 2015 à 20:18
+1
Utile
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...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de KX
nazorayzer 4 Messages postés lundi 20 avril 2015Date d'inscription 5 décembre 2015 Dernière intervention - 5 déc. 2015 à 00:00
0
Utile
mercii bieen c'est résolu ;)
Commenter la réponse de nazorayzer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.