Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.10.2005, 21:22 Titel: FreeBasic-Bugs |
|
|
Ich habe wie's aussieht einen Bug in FreeBasic entdeckt.
Es sieht ungefähr so aus:
A$=CHR$(3)
IF A$ <> CHR$(1) then print "A$ hat nicht wert 1"
B=3
IF B <> 1 then print "B hat nicht wert 1"
tja, bei mir kam nur beim 2. if was raus, das erste scheint da was aflsch zu machen, also kommt bei mir nur raus:
B hat nicht den wert 1
und nicht
A$ hat nicht den wert 1
B hat nicht den wert 1 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Eastler_dart

Anmeldungsdatum: 25.09.2005 Beiträge: 177 Wohnort: Baden-Würtemberg + Sachsen
|
Verfasst am: 25.10.2005, 21:40 Titel: |
|
|
Hi.
Hab dein Beispiel mal in mein Freebasic 0.14 unter W98SE eingegeben.
Bei mir stimmt alles.
A$ hat nich den Wert 1
und B hat nicht den Wert 1
wird angezeigt.
Prüf nochmal deine Schreibweisen, Gänsefüßchen etc.
schätze dort liegt ein Tippföhler
Eastler _________________ Kaum macht mans richtig, schon geht's |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.10.2005, 21:53 Titel: |
|
|
Wohl kaum! Der ganze Kot hat nämlich in QBasic funktioniert...
allerdings war es etwas anders, im programm war das sowas wie
player(1).isAlive=CHR(1) und so...vielleicht liegt's an meinem TYPE _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 25.10.2005, 22:41 Titel: |
|
|
Darf ich dir die empfehlung geben, Byte zu benutzen? Is das selbe wie ein string mit einem zeichen länge (CHR$(asc)) und kann dabei aber ohne CHR$ zugewiesen werden.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.10.2005, 20:59 Titel: |
|
|
Ichweiß dass es byte gibt, aber wie gesagt...mein spiel war vorher in qb geschrieben und da gab's den datentyp nicht. Da ich jetzt sowieso Integers benutze ist das viel einfacher  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.10.2005, 21:03 Titel: |
|
|
Aber BYTE frisst weniger Speicher als INTEGER, da kannst du doch noch Performance rauskitzeln
jb |
|
Nach oben |
|
 |
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 26.10.2005, 21:12 Titel: |
|
|
FB 0.15b CVS 2005-10-26 führt das o.g. Beispiel ebenfalls korrekt aus. Kannst du bitte uns ein vollständiges Beispiel zeigen wo dieser Vergleich fehl schlägt und welche Compiler-Version auf welcher Plattform du benutzt?
Danke.
Gruß,
Mark |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
helium

Anmeldungsdatum: 10.09.2004 Beiträge: 397 Wohnort: Leverkusen
|
Verfasst am: 27.10.2005, 10:42 Titel: |
|
|
Zitat: | Aber BYTE frisst weniger Speicher als INTEGER, da kannst du doch noch Performance rauskitzeln |
Normalerweise ist es immer andersherum: Entweder schnell und speicherhungrig oder langsam uns sparsam. Auch in diesem Fall ist es wieder so, da wir uns in einer 32Bit Umgebung befinden. 32Bit ist die natürliche Größe. _________________ Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit. |
|
Nach oben |
|
 |
tilli

Anmeldungsdatum: 10.09.2005 Beiträge: 73
|
Verfasst am: 27.10.2005, 20:09 Titel: |
|
|
Moin,
Das ist schon richtig, dass die CPU in der Lage ist, auf ein Quad (4Bytes = Interger auf 32Bit Rechnern) schneller zuzugreifen, da es sich sonst ein Quad holen muss und - insofern es nicht das erste von 4 bytes ist - durch Rotation oder ähnlichem (auf gut deutsch ein Schritt mehr) diese Byte zum Zugriff zurechtzulegen.
AAABER
Wenn es sich um große Felder handelt (hier sicher nicht, wenn mit Player(1) gearbeitet wird) dann kommt irgendwan mal der Cache in's Spiel.
Problematischer als das Auslesen dürfte Nebenbeigesagt das Abspeichern sein - da muss das Quad geholt, das Byte aktualisiert werden und dann das Quad wieder gespeiuchert werden.
AAABER
Wenn es sich um ein Type handelt ( Player(x)"."is_alife), dann ist es auch möglich einen Bitcheck durchzuführen und es als Bitflag laufen zu lassen - heirfür gibt es wiederum eine Hardware-Befehl. Und in dem Bitfeld können dann auch andere Bits untergebracht werden. Das spart Speicher und kostet(fast) keine Performance.
Ein weiteres muss man dabei immer noch sehen: auch der Programmcode ist Speicher - und wenn der zu lang wird (z.B. durch Vergleich mit festen Variablen statt mit einem Byte, dann muss der Cache wieder mehr arbeiten.
Alles in allem scheint es sich aber hier ohnehin 'nur' um einen Hochsprachenode zu hadeln, der 20-30 Mal ind er Sekunde abgefragt wird. Optimierunge lohnen da nicht wirklich.
CU2
Tilli |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.10.2005, 21:15 Titel: |
|
|
hm...ich bleib bei integers
das beispiel hab ich ejtzt nimmer komplett,da ich es ja übersetzt habe...
es war sowas wie
PLayer(1).IsAlive=CHR(1)
....
if Player(1).IsAlive=CHR(1) then Print "chr lebend" else print "chr tot"
if asc(Player(1).IsAlive)=1 then Print "asc lebend" else print "asc tot"
rauskam dann
chr tot
asc lebend
ich habe die aktuelle version von freeBasic _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 27.10.2005, 23:42 Titel: |
|
|
Als was war "IsAlive" deklariert?
Gruß,
Mark |
|
Nach oben |
|
 |
holger_b71
Anmeldungsdatum: 14.09.2005 Beiträge: 12
|
Verfasst am: 28.10.2005, 17:06 Titel: CHDIR-Bug??? |
|
|
Hallo,
habe gerade festgestellt, das der ChDir-Befehl von FB
unter WinXP nicht funktioniert.
Gibt's da schon Erfahrungen/WorkArounds? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 28.10.2005, 17:23 Titel: |
|
|
workaround -> SHELL "cd "+verzeichnis$ _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
mjs
Anmeldungsdatum: 26.09.2005 Beiträge: 75 Wohnort: Adelheidsdorf
|
Verfasst am: 28.10.2005, 18:23 Titel: Re: CHDIR-Bug??? |
|
|
holger_b71 hat Folgendes geschrieben: | Hallo,
habe gerade festgestellt, das der ChDir-Befehl von FB
unter WinXP nicht funktioniert.
Gibt's da schon Erfahrungen/WorkArounds? |
Welche Version? Und was bedeutet "nicht funktioniert"? Fehlermeldung? Welchselt der Befehl nicht in das Verzeichnis, bzw. nicht zum entsprechenden Laufwerk?
BTW: Wenn du auch auf ein anderes LAUFWERK wechselm möchtest, solltest du folgendes machen:
Code: | sub my_chdir(path as string)
if mid$(path,2,1)=":" then chdir left$(path,2)
chdir path
end sub |
EDIT: Dass CHDIR nicht das Laufwerk wechselt, sobald zusätzlich zur Laufwerks-Angabe auch ein Pfad angegeben ist, wurde der QB-kompatibilität wegen so implementiert.
Gruß,
Mark |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.10.2005, 21:18 Titel: |
|
|
IsAlive wurde als STRING*1 deklariert.... arbeitet Fb vielleicht mit unicode wodurch es string*2 sein müsste?
acuh ein bug: wenn ich einen grafikmodus im vollbild starte, und dann zur ide zurückkehre, dann ist das code-feld voller gradfikfehler und keine schrift ist zu erkennen. wenn ich dann z.B. f4 drücke, geht's wieder..... (ich habe eine riva TNT graka)
noch 2 fragen:
1) kann ich das dos-fenster bei einer anwendung wegbekommen? Mein spiel soll eigneltich nur das grafikfenster aufrufen. als ich BEedit verwendet habe(die ersatz-ide), konnte man das einstellen.
2) Wieso sind alle examples, die ich kompiliere, viel kleiner als meine eigenen exe, obwohl sie viel mehr code enthalten? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
holger_b71
Anmeldungsdatum: 14.09.2005 Beiträge: 12
|
Verfasst am: 28.10.2005, 21:20 Titel: ChDir-Bug!?!? |
|
|
Hallo,
erstmal Danke für die schnelle Antwort!
Ich verwende FB 0.14 und das Problem liegt bei ChDir.
Das Programm bricht kommentarlos ab, selbst ein
simples ChDir "\" führt zum Abbruch.
Ein > SHELL "cd "+verzeichnis$ < bringt nichts,
da der Verzeichniswechsel nur für die Instanz des
SHELL-Befehls gewechselt wird (jedoch nicht für
das laufd. Programm).
H. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.10.2005, 21:26 Titel: Re: ChDir-Bug!?!? |
|
|
holger_b71 hat Folgendes geschrieben: | Hallo,
Ich verwende FB 1.4 und das Problem liegt bei ChDir.
H. |
du meinst wohl 0.14?
Edit: Du hasts ja anscheindend schon korrigiert _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 28.10.2005, 21:30 Titel: |
|
|
Hallo!
@Jojo:
Bei deutscher Sprache gehst du zum Abschalten des DOS-Fensters wie folgt vor: Ansicht->Einstellungen->Compiler->Parameter-> <fbc> <filename> -s gui
Bei englischer Sprache soweit ähnlich!
Greetings,
Mao _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.10.2005, 21:41 Titel: |
|
|
ich hab auf deutsch geschaltet  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|