Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Doublewerten

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
21.09.2004, 18:15 Uhr
Oliver
S2-Pixelgeneral


Hi,

Also ich glaube ich bin bescheuert.

ich habe ein sehr seltsames Problem. Ich habe eine double Konstante mit den Wert 0.2 und dann eine double Variable mit den Wert 0. So ganz einfach. Jezt addiere ich zu 0 0.2 und da kommt nich wie erwartet 0.2 raus sondern 0.20000000298023 (???) Ich habe garantiert eigentlich auch keine Fehler im Code, aber da kommen immer solche komischen Werte raus. Wenn ich ein einfaches Programm mache, da klappt das auch, aber ich programmiere ein Jump&Run Spiel, wo die Konstante ein Geschwindigkeitsfaktor ist und die Variable die Geschwindigkeit. Es ist also wesentlich umfangreicher, aber eigentlich ist kein Fehler drin. Das Debugfenster zeigt auch alles richtig an, aber dann steht da plötzlich die oben erwähnte Zahl? Aber es klappt einfach nicht, immer wenn ich das so machen will, kommt das seltsame Ergebnis raus und ich habe keinen blassen Schimmer, woran das liegen könnte, hat da jemand eine Ahnung.

Danke im vorraus!
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.09.2004, 18:38 Uhr
(un)wissender
Niveauwart


Seltsam ist das nicht, 0.2 ist nicht exakt darstellbar. Schau dir dazu mal die Darstellung der Fließkommazahlen an.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.09.2004, 19:42 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Folgender Thread dürfte auch interressant sein:
http://forum.fachinformatiker.de/showthread.php?t=63616
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.09.2004, 14:04 Uhr
Oliver
S2-Pixelgeneral


Ja und was kann man dagegen machen, soll ich mir eine Bruchklasse schreiben?
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.09.2004, 14:25 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Worin besteht denn deine Problem?

Wenn du die beiden Zahlen vergleichen willst dann such hier mal nach Epsilon Vergleich.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.09.2004, 14:34 Uhr
Oliver
S2-Pixelgeneral


Nein, ich will sie nicht vergleichen.
Ich erklärst mal:

Ich mache wie gesagt ein Jump&Run Spiel. So da habe ich die 2 Koordinaten x,y als doubles gespeichert. Wenn ich die aber jetzt sie mit 0.2 und so addiere bzw. subtrahiere wird es ja so ungenau. So, aber da man ja nicht auf 0.6 Pixel zeichnen kann, muss es ja auch eine ganze Zahl gerundet werden. Und da ist das Problem. Als Beispiel:

Die Y Koordinate hat 1.9998829898 oder was weiß ich und wenn ich jetzt das Sprite zeichnen will, wird es nicht auf 2 sondern auf 1 gezeichnet. Dadurch schwebt die Figur immer einen Pixel über den Boden.

Man könnte jetzt natürlich sagen, ich soll die Koordinaten als int speichern, weil sie ja dann eh so dargestellt werden, aber das geht nicht, weil ich nun mal mit Gleitkommazahlen arbeiten muss, schon weil ich als Geschwindigkeits faktor z.B. 0.2 verwende.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.09.2004, 14:44 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Warum verwendest Du für die Berechnung nicht einfach ints, die Du mit 10 multiplizierst? Position mal 10, damit rechnen, Ergebnis durch 10. Dann hast Du für die Berechnung eine virtuelle Nachkommastelle und keine Probleme mehr. Google mal nach "Festkommaarithmetik"...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.09.2004, 14:47 Uhr
(un)wissender
Niveauwart


Addiere immer ein Epsilon oder nimm kuck dir modf (cmath) an.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.09.2004, 14:48 Uhr
Bruder Leif
dances with systems
(Operator)


Ätsch, schneller
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
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: