Loi binomiale en java

leejunki159 Messages postés 4 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 13 mai 2015 - Modifié par KX le 21/04/2015 à 21:17
leejunki159 Messages postés 4 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 13 mai 2015 - 21 avril 2015 à 22:12
Bonjour,
j'ai essayé à établir le code de loi binomiale mais je sais pas ou est le problème.

package loi.normale;


import java.util.Scanner;


public class somme {
   

 public static double factorielle(double x) {
 double i;
 double result=1;
 if(x >= 1) {
  for(i=x;i>1;i--) {
   result = result*i;
  }
  return result;
 }
 else if(x == 0) return 1;
 return 0;
}
public static double compter_combinaisons(int x,double y) {
 double z = x-y;
 return factorielle(x)/(factorielle(y)*factorielle(z));
}   
    
 // voici le pb    
   public static double somme(float a,double b,int n,float p ) {
 double s = 0;

for(float i= a;i<=b;i++){

    s=s+compter_combinaisons(n,i)*Math.pow(p, i)*Math.pow((1-p), (n-i));
   
            }
  return s;
}
public static void main(String args[] ) {
    int i;
    int n,a;
  
            double  b,s;
    Scanner sc=new Scanner(System.in);


System.out.println("a=");
  a=sc.nextInt();
  System.out.println("b="); 
   b=sc.nextDouble();


    s= somme(a,b,500, (float) 0.5);

        //double c=compter_combinaisons(a,b);
        System.out.println("binomiale :"+s);


}
     
   }

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
21 avril 2015 à 21:22
Bonjour,

Tu ne dois pas appeler une méthode par le même nom que la classe sauf si c'est un constructeur de cette classe (ce qui n'est pas possible avec une méthode static...)

Sinon quel est le problème ?
1
leejunki159 Messages postés 4 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 13 mai 2015
21 avril 2015 à 21:26
il me donne toujours 0
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > leejunki159 Messages postés 4 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 13 mai 2015
Modifié par KX le 21/04/2015 à 21:39
Il te donnes 0 si tu lui donnes a > b, c'est normal puisque tu ne rentres jamais dans la boucle for qui fait les calculs.

Et si a <= b, ça va appeler compter_combinaisons(n, i) avec n = 500, ce qui va donc calculer factorielle de 500 et factorielle de 500-i, qui sont des valeurs trop grandes pour un double, ça va donc te donner un infini, et comme tu fais la division de deux infinis, le résultat est impossible à calculer et tu obtiens NaN

Il faut revoir les formules mathématiques de ce calcul.
0
leejunki159 Messages postés 4 Date d'inscription mardi 21 avril 2015 Statut Membre Dernière intervention 13 mai 2015 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
21 avril 2015 à 22:12
Je vous remercie du fond du coeur pour votre aide
0
Rejoignez-nous