# [C++]Nur manchmal Floating Point Exception



## Romsl (10. November 2004)

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?


```
#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


----------



## RedWing (10. November 2004)

Hi,
dein Problem liegt darin das du deine Fakultätsfunktion falsch definiert hast..
fak(0) = 1 ! (und nicht fak(0) = 0)

Somit dividierst du bei entsprechenden Zahlen einmal durch 0 und die Gleitkommaausnahme
ist perfekt

Mach aus der Fuß eine Kopfgesteurte Schleife in deiner Fakultätsfunktion und du solltest 
damit keine Probleme mehr haben...


```
int faculty(int n)   
        {
            int result = 1;      
                
            while (n > 0)        
            {
                 result = result * n; 
                 n = n - 1;           
            }
            
            return result;       
        }
```

Somit ist jetzt fak(0) = 1 wie es die Mathematik vorschreibt...

Gruß

RedWing


----------

