Methoden Fakultät und Fehlerwert berechnen

Podux

Mitglied
Hallo Leute,
ich habe zur Zeit ein Problem beim Programmieren mit Java.
Die Berechnung der Fakultät(double-werte) funktioniert wunderbar, doch ich habe keine Ahnung wie ich auf den Rechnenfehler komme um dann bei einer Größe des Wertes von 10^-6, eine Rückrechnung zu starten um dann den relativ/absoluten Fehlerwert zu berechnen.

Ein Hinweis wie ich auf den Rechnenfehler komme, der 10^-6 nicht übersteigen darf, würde mir das schon sehr helfen.
Hier die genaue Aufgabe meines Professors:
############################################################
Prüfen Sie in dieser Methode fakultaet(), ob ein Rechenfehler den Betrag < 10 -6 über-
schreitet und lösen Sie in diesem Fall die selbstdefinierte ResultErrorException mit
einer Fehlermeldung aus, die über die Art und Größe des Fehlers informiert. (->Absolutbetrag des
Fehlers und relativer Fehler bei der "Rückrechnung")
Geben Sie im Hauptprogramm diese entsprechende Fehlermeldung aus und ermöglichen Sie
wie schon zuvor ein Weiterrechnen mit dem letzten korrekten Ergebnis
############################################################
Mein Quellcode
Java:
static double fakultaet(double zahl) throws NotNaturalNumberException, ResultErrorException
    {
        double ergebnis_double=1;

        
        if ((zahl >= 0) && (ganzZahl(zahl))) //Methode ganzZahl überprüft auf Ganzzahligkeit
        {            
            for (double counter = 1; (counter <= zahl); counter++)
            {
                    ergebnis_double = ergebnis_double * counter;
                  
            }
            return ergebnis_double;
        }
        else
        {
            throw new NotNaturalNumberException();
        }       
    }
 
Naja, den Fehler muss man eigentlich separat berechnen. Ich schätze mal ihr habt irgendwo eine Formel dafür bekommen (ich schätze mal das ist Teil einer Uniaufgabe?). Dann müsstest du dir ansehen wie man den Fehler für alle durchgeführten Operationen berechnet und aufsummiert. Ich erinner mich noch einmal die Fehlerfortpflanzung für die Subtraktion mittels Taylorreihenentwicklung gemacht zu haben. ABer frag mich nich mehr wie das ging, is ewig her...
 
Wie wärs wenn du mit BigInteger das ganze einfach nochmal ausrechnest und dann den unterschied der beiden Werte ausrechnest. Wenn nicht der ganze Wertebereich eines doubles abgedeckt werden muss, kannst du auch mit long/int rechnen.
 
BigInteger dürfen wir leider nicht verwenden. Haben von unserer Prof auch keinerlei Hinweise dazu bekommen, wie man das Ganze berechnen könnnte :/

Es soll laut seiner Aufgabe die Fakultät berechnet werden. Bei hohen Werten treten bei der Rechnung Fehler auf. Sobald diese den Wert 10^-6 übersteigen, soll er das Ganze Rückwärtsrechnen und dann den dabei entstandenen Absolutenfehler/Relativenfehler ausgeben.
 
Jetzt so im Nachhinein seh ich erst , dass das ganze ja double ist... Das macht die Aufgabe ne ganze Stufe einfacher.

Eigentlich musst du nach jedem Schritt einfach nur die Zahlen vor dem Komma entfernen und dann überprüfen, ob die nachkommastellen > 10^-6 sind....
 
Die ganze sache ist sowie so ne Farse. double fast nur ca. 15 Stellen, d.h. zahlen über 10^15 können gar nicht genau genug angegeben werden, geschweige den auf 6 Nachkommastellen. 20! liegt schon weit über dem Fassungsvermögen eines doubles.
 

Zurück
Oben