Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Komische Addition

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.08.2008, 18:58 Uhr
~Anfänger7K
Gast


Mein Programm zeigt an einer Stelle ein merkwürdiges Verhalten.
Ich habe 2 double Variablen, die in einer Schleife ständig addiert werden, wobei irgendwie beim 1. Durchlauf als Ergebnis von einfachen Additionen (z.B. 12+ (-12)) so was wie 3,3425e -009:shock: rasukommt. Bei weiteren Durchläufen verhält es sich normal. Die zwei Variablen können es nicht sein, weil ich deren Werte geprüft habe. Weiss jemand Rat?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.08.2008, 19:18 Uhr
Tommix



Hallo,
das ist normal. Gleitkommavariablen haben werden nur mit endlicher Genauigkeit gespeichert, so daß es zu diesem kleinen Fehler kommt. Deshalb funktioniert auch sowas wie if (x == 1.23) im Allgemeinen nicht.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.08.2008, 13:47 Uhr
~Anfänger7K
Gast


Naja, aber 12-12 müsste er soch ausrechnen können...oder nicht?
Und wie kann ich ihn dazu bewegen "normal" zu rechnen?
Danke für die 1.Antwort
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.08.2008, 14:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Naja, das ist an der natur der gleitkommavariablen das sie eben bei auslöschenden rechnungen (12-12 , -24 + 24, o.ä) u.A "falsche" ergebnisse liefern. 3,3 * 10^-9 ist 0,0000000033 also "fast" Null.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.08.2008, 20:12 Uhr
~Anfänger7K
Gast


ok, danke, ich muss wohl runden.....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.08.2008, 00:25 Uhr
Hans
Library Walker
(Operator)


Hi,

nein, anders herum: weil bei Berechnungen mit Gleitkommazahlen intern gerundet wird, erhälst du "falsche" Ergebnisse. Das Problem ist, das Zahlen, die in dezimaler Form ganze Zahlen oder "echte Brüche" darstellen, dies in der binären Form der Gleitpunktzahlen nicht mehr sind. Dann kann 1/3 + 1/3 + 1/3, also dreimal ein Drittel addiert schon mal 0.999999999 ergeben, was zwar fast Eins ist, aber eben nicht exakt Eins.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.08.2008, 18:34 Uhr
Lensflare



Er meint bestimmt das Ergebnis runden
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: