JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=0d699bb292df70021c7499ae4100f5eaMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Char aus Datei zu float
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.12.2003, 16:09    Titel: Antworten mit Zitat

Das was du ansprichst dürfte der berühmte FPU Bug sein. Das ist ein Hardwarefehler. Du scheinst mit Borland zu programmieren kann das sein. Da habe ich das Phänomän auch.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Manuel87
Mini JLI'ler



Anmeldedatum: 28.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 09.12.2003, 19:29    Titel: Antworten mit Zitat

Ne ich hab vc++ und dev-cpp also kein Borland! Das ist schon so wie ich sag! Probier mal aus! Gib ein paar zahlen ein mit wenigen nachkommerstellen und zeig sie mit printf an! Oder schreib sie in ein debugfile! Da sollte jetzt bei manchen eine kleine abweichung sein! Aber ich probiers nochmal aus und sag dann bescheid! Ist schon länger her dass mir das aufgefallen ist!
c.u-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.12.2003, 19:43    Titel: Antworten mit Zitat

Achso, das liegt an dem reservierten Speicher für float. Bei printf müsste der versuchen double oder sowas auszugeben und da hat er eben noch extra ballast dran. Du kannst die Ausgabe bei printf so formatieren das er das nicht so macht.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Manuel87
Mini JLI'ler



Anmeldedatum: 28.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 10.12.2003, 12:36    Titel: Antworten mit Zitat

Deine "Ballasttheori" ist ja ganz nett! Aber ich hab das schnell getestet und sie trifft nicht zu! Ich hab den Speicher dahinter null gesetzt und dann probiert und das ergebnis war das selbe!

ungefährer code:
char a[100];
float *fa=NULL;
memset(a,0,99);
fa=(float*)a;
(*fa)=4000.2; <= tritt nur bei größeren zahlen auf (soweit ichs getestet hab!)
printf("%f\n",fa);
...
...

danach hab ich noch den restlichen speicher gecheckt und es sind nur die ersten 4 BYtes verändert und die anderen null!

Ich galube, da es nur bei größeren zahlen auftritt, das es ein format mit Hochzahlen ist und normalen zahlen, sodass kleine werte mit wenig nachkommerstellen realtiv genau bis exact gespeichert werden können! Doch bei großen zahlen mit vielen nachkommerstellen wird float ungenau!

VORSICHT bei loops mit der zeit (like gameloop!)!
Mir ist es passiert, dass ich da negative zahlen bekommen hab:

Ich hab in meinem loop nicht viel getan! Nur mein animationstool getestet und ein paar simple striche per gdi gezeichnet! Da ist es mir passiert das die bewegung plötzlich falsch war! (das liegt nicht an meinem animationstool [nicht nur!]); Der loop war in der form:

float last,etime;// letzte; und vergangene zeit zwischen loopanfang und ende

last=get_tick();
calculate(etime);
doo_drawing();
etime=get_tick()-last;

Nun kann es passieren, dass durch ungenauigkeiten des types float last aufgerundet wird und get_tick von mir aus abgerundet oder gleich bleibt! Dadurch dass der unterschied zwischen den beiden last und get_tick soooo winzig klein ist wird dann last größer als get_tick()!
Probiert es aus wenn ihrs nicht glaubt! Wenn ihr wollt geb ich euch das test prog! Oder besser den source code!

Jedenfalls ist dann etime negative was rein nach mathematik und so nicht sein kann!!

get_tick ist nur eine pseudofunktion... sie soll die sekunden die seit mitternacht vergangen sind als float zurückgeben

allerdings find ich float trotzdem besser als double (wenn man die genauigkeit nicht braucht!!!) und benutzte in solchen loops einfach eine Obergrenzer der framerate! Eine die bei einem Spiel wahrscheinlich eh nicht erreicht werden kann, aber es ist notwendig, damit mein spiel z.b. auch noch in 10 Jahren ,wenn computer um ein vielfaches schneller sind rennt!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum