# Fakultät, NCR, NPR, Bernoulli-Wahrscheinlichkeit



## bröggle (24. Jun 2004)

Hi,(*lang nicht mehr hier*)


ich bastel gerade an einem kleinen "Stochastik programm" und dazu brauche ich folgende Funktionen:
Fakultät
nPr
nCr
b(n;p;k)


Gibt es eine Java-Klasse die diese Funktionen beinhaltet?

Ihr wisst nicht was das alles bedeuten soll?
Ich erkläre es euch.


Fakultät ist folgendes:

5!=5*4*3*2*1
3!=3*2*1

Aber das dürfte ja jedem ein Begriff sein(Standardaufgabe)


nPr=k-tupel aus einer n menge(mit reihenfolge ohne wiederholung)


10nPr5= 10!/(10-5!)


Also allgemein n!/(n-k)!




Dann nPr =k Teilmengen aus einer n Menge ohne Reihenfolge ohne Wiederholung


d.h.: 10nCr5 = 10!/((10-5)!*5!)


also allg.: n!/ ((n-k)!*k!)


So und dann noch die Bernouilli-Wahrscheinlichkeit


B(10;0.5;2)  = Wahrscheinlichkeit dafür dass aus 10 Losen mit einer Trefferwahrscheinlichkeit von 0,5 genau 2 treffer gezogen werden.


Formel : (n nCr k) *p^k *(1-p)^(n-k)





So gibt es diese Funktionen fertig? oder muss ich die mir selber basteln?(habe ich schon gemacht)


Wäre diese implementierung einigermaßen ok?

```
public class Stochastikklasse {
		public static double fakultaet(int n){
		double f_ergebnis=1;
		for(int i=n;i>0;i--){
			f_ergebnis*=i;
		}
		return f_ergebnis;
}


	public static double npr(int n, int k){
		double npr_ergebnis=0;
		npr_ergebnis=(Stochastikklasse.fakultaet(n))/(Stochastikklasse.fakultaet((n-k)));
		return npr_ergebnis;
}

	public static double ncr(int n, int k){
		double ncr_ergebnis=0;
		ncr_ergebnis=(double)(Stochastikklasse.npr(n,k)/Stochastikklasse.fakultaet(k));
		return ncr_ergebnis;
}
public static double B(int n, double p,int k){
		double B_ergebnis=0;
		B_ergebnis=(double)(Stochastikklasse.ncr(n,k)*Math.pow(p,k)*Math.pow((1-p),(n-k)));
		return B_ergebnis;
}
```


Was würdet ihr evtl ändern?


----------



## Beni (24. Jun 2004)

```
npr_ergebnis=(Stochastikklasse.fakultaet(n))/(Stochastikklasse.fakultaet((n-k)));
```
Sowas würde ich abkürzen, denn einige der berechneten Werte streichen sich ja wieder raus (verringert auch die Gefahr eines Überlaufs):


```
int value = 1;
int stop = n-k;
for( int i = n; i > stop; i-- )
  value *= i;

return value;
```

mfg Beni


----------



## bröggle (24. Jun 2004)

danke für den Tipp
Werde ich machen ;-)

Ich wollte nur soviel wie möglich code wiederverwerten...^-^


noch andere Tipps?


----------



## meez (25. Jun 2004)

Aber berechne die Fakultät richtig...:meld:
 nicht so wie Microsoft in seiner ersten Java implementation...  (3!=3+2+1)


----------

