Hallo habe ein Problem mit einem kleinen Programm, welches den Cosinus berechnen soll.



  • Bevor die Bemerkung kommt... ja ich weis man kann eine Cosinus Funktion importieren aber mein Programm basiert auf einer Vorgabe durch die Uni...

    Mein Problem: Ich verstehe nich wieso das Program anscheinend bei pow(-1,n) etwas anders rechnet als ich es will... jedenfalls kommt am Ende quatsch raus 😃

    [code="cpp"]

    #include <iostream>
    #include <cmath>

    using namespace std;

    int faku(int n){

    if(n == 0){
    return 1;
    }else{
    return n * faku (n-1);
    }
    }

    float cosx(float x, int g){
    float erg = 0;
    float erg2 = 0;
    for (int n = 0;n<g;n++){
    erg = ((pow((-1), n) * pow(x, 2*n)) / faku(2*n));
    erg2 = erg + erg2;
    }

    return erg2;

    }

    int main(void){
    int g = 0;
    float x = 0;
    float erg = 0;

    cout << "Cosinus von X: ";
    cin >> x;
    cout << "Genauigkeit g (darf nicht größer als 12 sein!): ";
    cin >> g;

    erg = cosx(x, g);

    cout << "Cosinus von "
    << x
    << " mit der Genauigkeit von "
    << g
    << " = "
    << erg;

    return 0;
    }

    Danke für eure Hilfe! 😃



  • Reyventall schrieb:

    Mein Problem: Ich verstehe nich wieso das Program anscheinend bei pow(-1,n) etwas anders rechnet als ich es will... jedenfalls kommt am Ende quatsch raus

    Anscheinend?
    Als ich will?
    Quatsch?
    Sollen wird jetzt raten?

    Codetags muss man auch wieder schließen.



  • Sry wegen des Codetags... hab mich grad erst hier registriert.

    Also ich habe die Werte für pow(-1,n) ausgeben lassen und da kommt bei g=3 immer 1 raus. Deshalb vermute ich dass das Problem bei dieser Operation liegt... Eigentlich müsste ja am Ende -3 rauskommen wenn man pow(-1,n) alleine in der Schleife berechnet, da sich ja die Werte für 3 Schleifendurchläufe addieren sollen.

    Also quasi für n = 0: -1^0 + 0 = -1
    n = 1: -1^1 - 1 = -2
    n = 2: -1^2 - 2 = -3

    Am Ende kommt aber 1 raus was ja augenscheinlich Quatsch ist.



  • Du hast dir also nicht das Ergebnis von pow angesehen!



  • -1^0 ist 1, genau wie -1^2.



  • Reyventall schrieb:

    ... jedenfalls kommt am Ende quatsch raus 😃

    Dein Programm funktioniert einwandfrei, wo ist das Problem?



  • Nein es funktioniert nicht einwand frei. Es funktioniert zwar, allerdings sollte am Ende etwas anderes rauskommen. Wenn man zb in einem Taschenrechner cos 3 ausgeben lässt, kommt etwas anderes raus als in meinem Programm... Das ist das Problem! 😞



  • MFK schrieb:

    -1^0 ist 1, genau wie -1^2.

    Sehe ich anders. -1^0 = -(1^0) = -1. Zumindest bei gängiger Operatorpräzedenz.
    pow(-1, 0) dagegen ist (-1)^0 = 1.

    An Reyventall:
    benenne doch ein Beispiel, für welches "Quatsch" rauskommt. Was setzt du ein, was kommt bei deiner Funktion raus, und was hätte rauskommen sollen?


  • Mod

    Reyventall schrieb:

    Nein es funktioniert nicht einwand frei. Es funktioniert zwar, allerdings sollte am Ende etwas anderes rauskommen. Wenn man zb in einem Taschenrechner cos 3 ausgeben lässt, kommt etwas anderes raus als in meinem Programm... Das ist das Problem! 😞

    😕 cos(3) ist ca. -0.98999. Bei deinem Programm kommt -0.98994 raus, wenn man zur Genauigkeit 7 rechnet. Ist doch ok. Ich glaube eher, du kannst mit deinem Taschenrechner nicht umgehen. Lass mich raten: Du hast 0.9986 als Ergebnis? Das ist nämlich der Cosinus von 3 Grad, nicht von 3 (Radians).



  • Ok jetzt bin ich verwirrt... ich habe das gerade mit 3 zur Genauigkeit 4 probiert und es kam -18.3... raus... jetzt habe ich es mit dem Beispiel von SeppJ ausprobiert und es funktioniert... Auch mit 3 und Genauigkeit 4 funktioniert es nun... Der Witz ist nur, dass selbst mein Prof das falsche Ergebnis gesehen hat und nicht auf den Fehler kam...
    Dann ist ja jetzt alles gut 😃 Danke trzd!

    Ps: SeppJ ich kann mit meinem GTR umgehen... da ich daher wusste das -18.3... falsch war, denn ich hab da auch -0.99... raus gehabt. 😉


  • Mod

    Reyventall schrieb:

    Ok jetzt bin ich verwirrt... ich habe das gerade mit 3 zur Genauigkeit 4 probiert und es kam -18.3... raus... jetzt habe ich es mit dem Beispiel von SeppJ ausprobiert und es funktioniert... Auch mit 3 und Genauigkeit 4 funktioniert es nun... Der Witz ist nur, dass selbst mein Prof das falsche Ergebnis gesehen hat und nicht auf den Fehler kam...
    Dann ist ja jetzt alles gut 😃 Danke trzd!

    Der Computer wird sicher richtig rechnen. Du hast wahrscheinlich seit dem -18.3-Ergebnis irgendwelche Änderungen gemacht (auch wenn sie dir womöglich harmlos erschienen), die inzwischen den Algorithmus korrigiert haben.



  • Ja kann sein, auch wenn ich mir dessen nicht wirklich bewusst bin aber hauptsache es funktioniert jetzt. 👍


Anmelden zum Antworten