Seite 1 von 3
Bug bei binärem ODER?
Verfasst: 02.09.2019 07:50
von techniker
Hi!
ich habe mir eben schon den Ast gesucht und folgendes gefunden:
Ist das wirklich ein Bug oder ein Denkfehler meinerseits?
Ich arbeite zwar mit 32 Bit (wegen externer DLL's), aber trotzdem sollte PB doch korrekt mit Quad arbeiten?
OK:
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Define a.b = #False, b.l = 0
Debug Invers(a) | Bool(b)
FAIL:
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Define a.b = #False, b.q = 0
Debug Invers(a) | Bool(b)
Der Unterschied ist lediglich die Variable b, welche in Quad geändert wurde.
PureBasic-Version: 5.62, 32-bit
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 09:25
von techniker
Workaround:
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Procedure.l BoolQ(value.q)
ProcedureReturn Bool(value)
EndProcedure
Define a.b = #False, b.q = 0
Debug Invers(a) | BoolQ(b)
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 09:45
von Josh
Help hat geschrieben:Wird das Ergebnis des Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird das Ergebnis des Ausdrucks direkt in dieser Variable gespeichert
Dein Ergebnis wird also in eine Variable vom Typ .b gestellt. Was soll da also außer Blödsinn rauskommen.
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Define a.b = #False, b.q = 0
x.q = Invers(a) | Bool(b)
Debug x
ODER:
Wenn du zwei verschiedene Typen ohne Ergebnisvariable verwendest, dann stelle den größeren Typ auf die linke Seite.
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Define a.b = #False, b.q = 0
Debug Bool(b) | Invers(a)
Wenn du nicht weißt ob es sich um einen Bug handelt, dann solltest du unter Fragen posten und nicht bei den Fehlern !!!
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 09:53
von techniker
Josh hat geschrieben:
Dein Ergebnis wird also in eine Variable vom Typ .b gestellt. Was soll da also außer Blödsinn rauskommen.
Und warum funktioniert dann b.l?
nach deiner Aussage dürfte dies auch nicht funktionieren, da .b = 1 Byte und .l = 4 Byte.
Der Fehler tritt jedoch nur bei .q auf! - Daher die Vermutung auf einen Bug!
Josh hat geschrieben:
Wenn du nicht weißt ob es sich um einen Bug handelt, dann solltest du unter Fragen posten und nicht bei den Fehlern !!!
Kein Grund um (virtuell) herumzuschreien..!

Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 09:56
von Josh
techniker hat geschrieben:Und warum funktioniert dann b.l?
Die Frage stellt sich einfach nicht. Wenn du einen Befehl falsch ausführst und in bestimmten Fällen kommt ein richtiges Ergebnis, dann hast du trotzdem einen Befehl falsch ausgeführt.
techniker hat geschrieben:Kein Grund um (virtuell) herumzuschreien..!

Doch, ist ein Grund
@Einen Mod
Bitte in Fragen verschieben
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 09:59
von techniker
Josh hat geschrieben:techniker hat geschrieben:Und warum funktioniert dann b.l?
Die Frage stellt sich einfach nicht. Wenn du einen Befehl falsch ausführst und in bestimmten Fällen kommt ein richtiges Ergebnis, dann hat du trotzdem einen Befehl falsch ausgeführt.
Und welche saubere Lösung (ohne Tricksereien, wie bedingte ODER-Reihenfolgen) schlägst du vor?
Ein Cast unterstützt (m.W.n.) PB noch nicht..
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 10:02
von techniker
Gleiches Verhalten von Variable b:
(einfach von .l auf .q tauschen)
Code: Alles auswählen
Macro Invers(in) ; Invertiert und maskiert das LSB
((~in) & $1)
EndMacro
Define a.b = #False, b.l = 0, c.l
c = Invers(a) | Bool(b)
Debug c
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 10:04
von Josh
techniker hat geschrieben:Und welche saubere Lösung (ohne Tricksereien, wie bedingte ODER-Reihenfolgen) schlägst du vor?
Ich habe dir oben zwei Vorschläge gemacht. Eine Trickserei sehe ich keine, weil ich in beiden Fällen genau das mache, was in der Hilfe steht.
Hilfeleser wissen eben mehr

Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 10:11
von techniker
Josh hat geschrieben:Hilfeleser wissen eben mehr

Ich verwende aber das Ergebnis in einer weiteren Variable.. :-b
Re: Bug bei binärem ODER?
Verfasst: 02.09.2019 12:31
von mk-soft
Ist definitiv ein Bug...
War aber schon mal für die x86 Version vor Ewigkeiten gemeldet worden.