JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Char aus Datei zu float
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 00:33    Titel: Char aus Datei zu float Antworten mit Zitat

Hi,
ich programmiere derzeit an einem Levelloader für meine Engine. Daher muss ich float Daten aus einer Textdatei lesen.
1) Ich brauche eine Funktion um aus char ein float wert zu machen, habe in der msdn nur funktionen für long, double und int gefunden.
2) Wie ist das eigentlich mit dem Postfix f bei Float-Werten(1.0f etc.)?
Was genau bewirken diese eigentlich? Muss ich die mit auslesen?

Bin für jede Hilfe dankbar.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 07:26    Titel: Antworten mit Zitat

zu 1: atof()-Funktion. Wandelt deinen char in eine flaot-Zahl um.
Für näheres schau mal unter atof im msdn
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 11:37    Titel: Antworten mit Zitat

Es gibt 2 Möglichkeiten, einen Float in einer Datei zu speichern und später wieder auszulesen. (Nein, eigendlich gibt es noch wesentlich mehr Möglichkeiten)
Variante 1: Als String (char *) mittels atof() wieder einlesen und z.B. mittels fprintf() schreiben.
Variante 2: Die 4 Bytes, die den Float repräsentieren binär abspeichern. (nur, wenn die gesamte Datei eine Binärdatei ist) (read/write sind dafür deine Freunde...)
Das f steht für "Float oder Floatkonstante" und sagt dem Compiler, dass es sich bei dieser Variable um eine floatvariable handelt und nicht um eine Double. atof() Verwendet wiese Information gar nicht, da der Rückgabewert in jedem Fall als Float gespeichert wird. Diese Informationen sind eher für den Compiler gedacht.
f ist im übrigen nicht der einzige verwendete Post- oder Prefix. So kann man Textkonstanten z.B. Explizit als UnicodeTextKonstanten definieren, indem man vor dem einleitendem Anführungszeichen ein L schreibt, z.B.
wprintf(L"AusgabeText");

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 12:55    Titel: Antworten mit Zitat

Mhh, die atof() Funktion habe ich auch schon gefunden, aber wenn ich es richtig sehe bekomme ich damit nur double Werte!? Ist es denn ohne Probleme Möglich von double zu float zu casten? Bin im Moment leider am anderen PC, wo kein VC++ installiert ist.
Aber thnx.
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: 07.12.2003, 12:58    Titel: Antworten mit Zitat

Das einzige Problem ist nur der sehr geringe Geschwindigkeitsverlust durch das casten. Sonst funktioniert die Funktion ohne Probleme.
_________________
"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
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 13:12    Titel: Antworten mit Zitat

Gut, danke. Geschwindigkeitsverlust ist zu verkraften, weil es wie gesagt zum laden von Levels benutzt wird, die ja nicht während des Spielens geladen werden und die fps runter ziehen. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 13:27    Titel: Antworten mit Zitat

Zumal es beim casten von double zu float keinen verlust gibt - von int zu fload/double oder von double zu int gibt es ganz geringe verluste, weil die Bitrepräsentation anders ist...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 07.12.2003, 13:37    Titel: Antworten mit Zitat

So gering sind die Verluste nun auch wieder nicht. Da nicht gerundet wird. Was manchmal notwendig ist.

3.5 wird nicht zu 4 sodnern zu 3

Das wird einfach nur getruncated. Was ziemlich nervt.
_________________
"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
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 13:54    Titel: Antworten mit Zitat

Ja, aber float ist ja auch eine Gleitkomma-Variable, und damit ist beim Auslesen kein Problem da. Er speichert als 1.250, liest aus als 1.2500000, und rundet das dann wieder auf 1.250. Wo ist also das Problem? (Ich hab da nicht die richtige Menge an nullen verwendet, ich weiß)
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: 07.12.2003, 16:09    Titel: Antworten mit Zitat

Hehe, währ toll wenn er wirklich runden würde ohne Geschwindigkeitsverlust ist leider nicht so. Er schneidet die Stellen einfach weg.
_________________
"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
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 16:25    Titel: Antworten mit Zitat

Die Geschwindikkeit ist ein anderes Thema, aber was ich sagen wollte war das das abschneiden völig egal ist
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: 07.12.2003, 16:30    Titel: Antworten mit Zitat

Sobald du aber möglichst genaue Werte benutzen möchtest wirst du auch merken das das doch ziemlich blöd ist. Ich habe die Probleme schon ziemlich oft gehabt. Hängt aber davon ab wie du mit den Werten arbeitest.

In MiracleBoy´s Fall hast du aber recht und das ganze ist nicht sonderlich schwerwiegend.
_________________
"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
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 16:46    Titel: Antworten mit Zitat

Zumal ich wahrscheinlich sowieso nur Zahlen mit einer Nachkomma Stelle verwenden werde(1.0 = 1m). Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nahar
Senior JLI'ler


Alter: 36
Anmeldedatum: 16.07.2003
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 07.12.2003, 19:55    Titel: Antworten mit Zitat

erstens das, und zweitens wird er wohl kaum einen Wert als float haben wollen den er nicht als float abgespecihert hat -> der wert kann gar nicht im double-Berecih sein
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Manuel87
Mini JLI'ler



Anmeldedatum: 28.07.2003
Beiträge: 33

Medaillen: Keine

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

Soweit ich weiß, wird ein float nicht in form von 1.250 abgespeichert, sondern in einem Komplizierteren Format (Ich glaub mit exponent!) Das hab ich gmerkt wie ich irgnedeine Zahl eingegeben hab und der rechner mit einer leicht unterschiedlichen zahl weitergerechnet hat: (Glaub ich hab 4.02 eingegeben und er hat mit 4.0199768 oder so weitergerechnet! Ich werd das aber nochmal nachchecken! Insofern hast du sogar von 1.205 cast from double to float geringe (unbedeutende) Verluste!!!
Aber ich werd mir das nochmal anschauen!
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 1, 2  Weiter
Seite 1 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