leejunki159
Messages postés4Date d'inscriptionmardi 21 avril 2015StatutMembreDernière intervention13 mai 2015
-
Modifié par KX le 21/04/2015 à 21:17
leejunki159
Messages postés4Date d'inscriptionmardi 21 avril 2015StatutMembreDernière intervention13 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);
}
}
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 2024127 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 ?
leejunki159
Messages postés4Date d'inscriptionmardi 21 avril 2015StatutMembreDernière intervention13 mai 2015 21 avril 2015 à 21:26
il me donne toujours 0
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 2024127
>
leejunki159
Messages postés4Date d'inscriptionmardi 21 avril 2015StatutMembreDernière intervention13 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.
leejunki159
Messages postés4Date d'inscriptionmardi 21 avril 2015StatutMembreDernière intervention13 mai 2015
>
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 2024 21 avril 2015 à 22:12
21 avril 2015 à 21:26
Modifié par KX le 21/04/2015 à 21:39
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.
21 avril 2015 à 22:12