Hallo zusammen.
Ich programmiere gerade ein Programm, welches in der Lage sein soll die Wahrscheinlichkeit bei einem Bernoulli-Experiment auszurechnen.
Jedoch scheitert es daran, dass mit das Programm bei zu kleinen Dezimalwerten, zum Beispiel 0.0000000334 das Komma so verschiebt dass es zu einem 0.0334 wird. Nur habe ich leider keine Ahnung warum.
Ich habe hier mal die wichtigsten Methoden:
Und nun ein Beispiel:
Wenn ich für n = 100, p = 0.5 und k = 60 eingebe bekomme ich als ergebnisstring ein "1.08". Das ist auch richtig.
Wenn ich dann aber für k = 20 eingebe, erhalte ich als ergebnisstring "4.22". DAS ist falsch! Denn eigentlich müsste das Ergebnis so lauten: "0.0000000422".
Woher kommt das, dass das Komma / der Punkt bei so extrem kleinen Zahlen einfach verschoben wird?
Würde mich freuen, wenn mir einer aushelfen könnte.
Gruß Tobias
Ich programmiere gerade ein Programm, welches in der Lage sein soll die Wahrscheinlichkeit bei einem Bernoulli-Experiment auszurechnen.
Jedoch scheitert es daran, dass mit das Programm bei zu kleinen Dezimalwerten, zum Beispiel 0.0000000334 das Komma so verschiebt dass es zu einem 0.0334 wird. Nur habe ich leider keine Ahnung warum.
Ich habe hier mal die wichtigsten Methoden:
Code:
public String bernoulli_exakt(double n, double k, double p)
{
BigDecimal schritt1 = new BigDecimal("" + bin(n,k));
BigDecimal schritt2 = new BigDecimal("" + Math.pow(p,k));
BigDecimal schritt3 = new BigDecimal("" + Math.pow(1-p,n-k));
ergebnis = new BigDecimal("" + (schritt1.multiply(schritt2).multiply(schritt3)));
ergebnis = ergebnis.movePointRight(2);
String ergebnisstring = ergebnis.toString();
if(ergebnisstring.length() > 4)
{
return (ergebnisstring.substring(0,4));
}
else
return ergebnisstring;
}
public BigDecimal fak(double zahl)
{
BigDecimal ergebnis = new BigDecimal("1");
for(long i=2; i < zahl+1; i++)
ergebnis = ergebnis.multiply(new BigDecimal("" + i));
return ergebnis;
}
public BigDecimal bin(double n, double k)
{
BigDecimal ndec = new BigDecimal("" + n);
BigDecimal kdec = new BigDecimal("" + k);
return (ndec.divide(fak(n-k).multiply(kdec)));
}
Und nun ein Beispiel:
Wenn ich für n = 100, p = 0.5 und k = 60 eingebe bekomme ich als ergebnisstring ein "1.08". Das ist auch richtig.
Wenn ich dann aber für k = 20 eingebe, erhalte ich als ergebnisstring "4.22". DAS ist falsch! Denn eigentlich müsste das Ergebnis so lauten: "0.0000000422".
Woher kommt das, dass das Komma / der Punkt bei so extrem kleinen Zahlen einfach verschoben wird?
Würde mich freuen, wenn mir einer aushelfen könnte.
Gruß Tobias