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 : 0mittlerweile 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.