sin(M_PI) != 0 ?!



  • Hi Leute,
    nur eine kleine frage:
    vor jahren fragte ich, woran es liegen könnte,
    wieso folgender code das falsche Ergebnis als Ausgabe (an meinem PC) liefert:

    cout << "sin(M_PI) = "<< sin(M_PI) << endl;
    
    Ausgabe:
    
    sin(M_PI) = 1.22515e-16
    

    gebe ich "sinus von PI" im "rad"-modus in meinen taschenrechner ein,
    zeigt er richtig an : 0

    mittlerweile weis ich um die rundungsfehler bei reellen datentypen (double).
    liegt es an diesen, dass ich am PC dieses
    offensichtlich falsche Ergebnis erhalte ?

    danke im voraus,
    epcfreak



  • epcfreak schrieb:

    liegt es an diesen, dass ich am PC dieses
    offensichtlich falsche Ergebnis erhalte ?

    Hi,
    wie offensichtlich ist das denn? Ich meine 1.22515e-16 ist ja fast 0 und die paar Kommastellen ... 🙄

    MfG

    Alexander Sulfrian

    PS: Vielleicht solltest du die Zahl mal ein wenig vorteilhafter ausgeben! 1.22515e-16 = 1.22515 * 10-16



  • Wie ist M_PI definiert?



  • epcfreak schrieb:

    mittlerweile weis ich um die rundungsfehler bei reellen datentypen (double).
    liegt es an diesen, dass ich am PC dieses offensichtlich falsche Ergebnis erhalte ?

    Ja, aber "offensichtlich falsch" ist es nur aus Deiner Sicht.
    Pi ist eine irrationale Zahl und läßt sich auf kein Bitmuster endlicher Länge abbilden. Somit ist also M_PI ein gerundeter Wert und sin(M_PI) darf dann im Grunde nicht 0 zurückliefern.



  • Zur Illustration, dass alles seine Richtigkeit hat:

    Caption = FloatToStrF(sin(M_PI), ffFixed, 15, 15);
    


  • Somit ist also M_PI ein gerundeter Wert und sin(M_PI) darf dann im Grunde nicht 0 zurückliefern.

    stimmt. ok. berechtigter einwand.

    danke an alle.

    ich fürchtete schon, irgendetwas stimme nicht
    an der implementierung von sin(x) in meinem compiler.

    erhaltet ihr auch dieses ergebnis an eurem computer mit euren compilern ?



  • Vielleicht solltest du einfach runden, da es dir bestimmt nicht auf die 16. Stelle nach dem Komma ankommt.


Anmelden zum Antworten