Long Variablen - Komisches Verhalten [erledigt]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Thunder

Betreff: Long Variablen - Komisches Verhalten [erledigt]

BeitragDo, Jun 27, 2013 8:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

hab gerade mein neues Projekt getestet und mir ist aufgefallen, dass ausnahmsweise Mal nicht ich einen Fehler verursache, sondern BlitzMax. Zumindest glaube ich das. Aber ich wollte nachfragen, weil ich sonst nie mit 64 Bit Zahlen arbeite. Prinzipiell sollten sie sich so verhalten, wie Int oder? Nur mit größerem Wertebereich.

BlitzMax: [AUSKLAPPEN]
Strict
Framework brl.blitz
Local l:Long = 12323434423
l = Sgn(l)
WriteStdout l+"~n"

Der Code gibt -1 aus, obwohl die Zahl, die in l gespeichert wird, positiv ist. Kann das jemand bestätigen? Und das liegt wahrscheinlich nicht Mal an Sgn (das ist eine C Funktion, die korrekt arbeiten sollte), sondern an der Art, wie die Zahl von BlitzMax gespeichert wird:
Code: [AUSKLAPPEN]
   mov   dword [ebp-8],-561467465
   mov   dword [ebp-4],-1


Was offenbar 12323434423 entsprechen soll. Noch interessanter:
Hängt man an den Code oben noch:
BlitzMax: [AUSKLAPPEN]
For l = 10000000000 To 20000000000
WriteStdout "Obacht! Wird so oft ausgefuehrt!"
Next

diese Schleife an, dann geht alles glatt. Steht sie alleine:
BlitzMax: [AUSKLAPPEN]
Strict
Framework brl.blitz
Local l:Long
For l = 10000000000 To 20000000000
WriteStdout "Wird nicht ausgeführt..."
Next

wird sie nicht betreten, obwohl beide gleichwertigen Assemblercode erzeugen.

Meiner Meinung nach ist da mindestens ein Bug in der Verarbeitung von Long Datentypen und ich hab nicht so Lust, Marks Fehler zu finden...
Bugreport machen?

Danke Smile

Edit: Mir ist gerade eingefallen, dass BlitzMax ja die Zahlen als Int parst oder so. Und wenn man an die Zahlen :Long hängt, so gibt es zumindest Problem 1 nimmer. Aber die Schleife funktioniert allein stehend immer noch nicht.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Do, Jun 27, 2013 8:58, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDo, Jun 27, 2013 8:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie du selbst schon festgestellt hast parst BMax leider lle Zahlen erst mal nach INT.
Um die Schleife korrekt auszuwühren musst du also auch den Schleifenkopf von 10000000000:long nach 200000000000:long definieren.
Der Explizite Cast sorgt dann für richtige Verhältnisse.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Thunder

BeitragDo, Jun 27, 2013 8:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Tut mir leid. Hast recht...
Ich hab leider wieder meinen Modulordner nicht im Griff Embarassed
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group