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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

31

08.06.2012, 22:53

Das Problem ist, dass Block ja anscheinend die Positionen als float speichert, während das suchen und finden von Einträgen in einem Array oder das Vergleichen viel sicherer mit int arbeitet. Denn wenn man zwei floats direkt vergleicht kann es auf Grund von Rundungsfehlern zu einem falsch Negativ führen, obwohl die Wert eigentlich gleich sein sollte, oder sehr nahe bei einander liegen. Daher ist auch eine Epsilonumgebung notwendig (ohhh, da fällt mir ein das auch der Vergleichsoperator besser mit einem epsilon arbeiten sollte). Sinn von +0.5f ist, dass dadurch immer korrekt gerundet wird; alles kleiner als x.5 wird auf x abgerundet und alles größer gleich x.5 wird auf x+1 aufgerundet.

Aber all das wird hinfällig wenn du Block einfach so abänderst, dass int statt float für die Positionen genutzt wird, was schneller und sicherer ist.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

32

08.06.2012, 23:01

Ok werd ich machen, danke ;)
Nur um das richtig verstanden zu haben: Wenn ich +0.5f machen würde, dann wird meine Zahl nicht vorher abgerundet, weil bei einem größer oder gleich großen Wert von 0.5f aufgerundet wird, wegen der Ungenauigkeit der floats?

33

08.06.2012, 23:23

Ein cast von float auf int schneidet einfach alles hinter dem Komma ab. Ob du nun also 1,4 oder 1,9 castest, ergibt es immer eins. Mit +0,5 wird alles, was größer 1,5 ist größer als 2 und damit erreichst du korrektes Runden.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

34

09.06.2012, 16:53

Funktioniert es denn nun? Falls ja, wäre das ja quasi ein Wunder.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Geheim

Treue Seele

  • »Geheim« ist der Autor dieses Themas

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

35

09.06.2012, 19:15

^^ ne, aber ich weiß ja jetz woran es gelegen hat ;)
Ich werd das ein andermal von vorne beginnen und dann gleich richtig machen

Werbeanzeige