Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

1

22.01.2011, 21:33

[C#] Komische double/float rundungen

Hallo zusammen
Ich versteh grad nicht was mein Computer da macht... vielleicht könnt ihr mal weiter helfen

Quellcode

1
2
3
4
5
6
7
8
9
10
double cs = 0.70710676573223719;
double sn = 0.70710679664085752;

float X = 5.0f;
float Y = 5.0f;

double y = X * sn + Y * cs;

float a = (float)y;
float b = (float)( (double)(X * sn + Y * cs) );

Nach meinem Verständnis müssten a und b gleich sein, denn ich mach ja bei beiden variablen nichts anderes.
Jedoch ist a = 7.071068 und b = 3.53553367
Also passiert hier wohl nicht das gleiche... aber warum?
Daran, dass da irgendwas wegoptimiert wird kann es nicht liegen, da es im Debug vorkommt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

22.01.2011, 21:41

Kann ich nicht reproduzieren, bei mir passiert genau was zu erwarten ist: a und b haben den selben Wert.

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

22.01.2011, 21:51

Hm ok in nem leeren Konsolenprogram funktionierts bei mir auch...
Dann will ich mal hoffen das es an XNA liegt weil es wieder irgendwo nen Schalter hat, der die Präzision herabsetzt...

Danke :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.01.2011, 00:05

lol, du sagtest du hast die Werte a = 7.071068 und b = 3.53553367 obwohl a und b gleich sein sollten. Rundungsfehler kann man da mal ganz, ganz sicher ausschließen. Das kann eigentlich nur einen von drei Gründen haben: Du hast die Werte falsch abgelesen, dein Code ist nicht ganz das was du oben angegeben hast oder der von dir verwendete Compiler hat einen extrem schwerwiegenden Bug ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (23.01.2011, 00:10)


Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

5

23.01.2011, 00:22

Hm...

Möglichkeit 1 und 2 können wir ja mal ausschließen:

(Link)


Zumindest seh ich da nichts...

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

23.01.2011, 00:27

Jup. Im Release gibts aber die gleichen Ergebnisse (y muss man dann natürlich noch irgendwo benutzen weils ja sonst wegoptimiert wird)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

23.01.2011, 00:30

Nope, Möglichkeit 2 trifft zu: Dir ist schon klar dass du in deiner Berechnung da beide Male den Wert v.X verwendest der vorher und nacher zwei ganz verschiedene Werte hat!? ;)

EDIT: sry, hab den Beitrag wo ich gefragt hab obs der Debug Build ist wohl gelöscht bevor du geantwortet hast da es bei nochmaligem lesen obsolet war das zu fragen...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (23.01.2011, 00:37)


Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

23.01.2011, 00:41

Autsch... ja jetzt ists mir klar :D
Danke für die Hilfe

Werbeanzeige