Hi,
ich habe folgende Funktion zur Berechnung von Wahrscheinlichkeiten. Es werden 2 Parameter l und r eingegeben. Ausgegeben werden soll n.
q(n, l) < r.
Ich denke, dass die Berechnungen korrekt sind. Für kleine Werte funktioniert das ganze auch. Bsp l = 4 und r = 0.25 aber gehe ich höher dann bekomme ich eine Floating Point Exception. Kann mir vielleicht jemand verraten wodurch diese Exception erfolgt oder noch besser einen Vorschlag zur Lösung meines Problems bereitstellen?
Danke und Gruß
Romsl
ich habe folgende Funktion zur Berechnung von Wahrscheinlichkeiten. Es werden 2 Parameter l und r eingegeben. Ausgegeben werden soll n.
q(n, l) < r.
Ich denke, dass die Berechnungen korrekt sind. Für kleine Werte funktioniert das ganze auch. Bsp l = 4 und r = 0.25 aber gehe ich höher dann bekomme ich eine Floating Point Exception. Kann mir vielleicht jemand verraten wodurch diese Exception erfolgt oder noch besser einen Vorschlag zur Lösung meines Problems bereitstellen?
Code:
#include <iostream>
#include <cmath>
using namespace std;
/*
* Description: This program calculate n of q(n, l) < r. Needed input
* parameters are l and r.
*/
class BinomialCalc
{
public:
//calculated n
int n;
int n_loop;
int fac_help;
double r_calc;
double r_save;
/*
* standard constructor
*/
BinomialCalc()
{
//empty constructor
}
void binomialCalc(double l, double r)
{
n = 0;
n_loop = 0;
r_calc = 0;
/*
* Loop iteration of the output result n.
*/
while(r > r_calc)
{
fac_help = 0;
n_loop = n + 1;
/*
* calculates the sum of probabilities of an event
*/
r_calc = pow((1 / l), n_loop);
for (int i = n_loop; i > 1; i--)
{
cout << "i: " << i << endl;
fac_help++;
r_calc += ((faculty(i) / (faculty(i - fac_help) * faculty(fac_help))) *
pow((1 / l), (i - fac_help)) * ((l - fac_help) / l));
}
//iteration of n
n++;
}
cout << "q(" << n << ", " << l << ") < " << r << endl;
cout << "Somit ist n = " << n << endl;
}
/*
* calculates the faculty of an integer n.
*/
int faculty(int n)
{
int result = 1;
do
{
result = result * n;
n = n - 1;
}
while (n > 0);
return result;
}
};
int main(int argc, char *argv[])
{
if (argc == 3)
{
//convert chars to double values
double l_in = atof(argv[1]);
double r_in = atof(argv[2]);
BinomialCalc *calculation = new BinomialCalc();
calculation->binomialCalc(l_in, r_in);
delete calculation;
}
else
{
cout << "Falsche Anzahl von Argumenten" << endl;
}
return 0;
}
Danke und Gruß
Romsl