Seite 1 von 2
x=x%100+((x<0)*100) arbeitet nicht wie zu erwarten!
Verfasst: 13.12.2005 10:03
von Norbie
Hi, warum ergibt dieser kurze Code -5 und nicht wie zu erwarten 95?
x=-5
x=x%100+((x<0)*100)
;x=-5+(1*100)
Debug x
Oder anders gefragt, warum ergibt (x<0) als Ergebnis #false?
Eine Lösung für dises Einfache Problem lässt sich hoffentlich finden!
Danke!
Verfasst: 13.12.2005 10:10
von freedimension
Die Auswertung von Boolschen Ausdrücken unabhängig von If, While und Until gibt es leider noch nicht

Verfasst: 13.12.2005 10:10
von ts-soft
PureBasic kennt keine Boolean, siehe hier:
http://forums.purebasic.com/german/view ... ht=boolean
Vergleiche nur mit If, While oder Until
Edit:
Mirko hat schneller geantwortet

Verfasst: 13.12.2005 10:22
von Norbie
Das ist ja riesengroße Scheiße!
Ist das in V4 geplant?
Verfasst: 13.12.2005 16:16
von Batze
Wenn dus umbedingt brauchst musst du dir halte eine Funktion dafür machen.
Code: Alles auswählen
procedure GT(Wert1, Wert2)
if Wert1 > Wert2
procedurereturn 1
endif
procedurereturn 0 ; kann man ja mal vergessen
endprocedure
Ich weiß ist lahm, aber für den Notfall?
Verfasst: 13.12.2005 16:22
von ts-soft
Batze hat geschrieben:Wenn dus umbedingt brauchst musst du dir halte eine Funktion dafür machen.
Code: Alles auswählen
procedure GT(Wert1, Wert2)
if Wert1 > Wert2
procedurereturn 1
endif
endprocedure
Ich weiß ist lahm, aber für den Notfall?
So eine kleine Procedure und schon ein Fehler
Code: Alles auswählen
Procedure GT(Wert1, Wert2)
If Wert1 > Wert2
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
Ohne ProcedureReturn ist nicht sichergestellt, das 0 zurückgegeben wird.
Verfasst: 13.12.2005 16:26
von Batze
Bei mir gehts zwar trotzdem aber du hast natürlich recht.
Wann geht das denn nicht?
Verfasst: 13.12.2005 16:36
von nco2k
abgesehen von floats (wird hoffentlich gefixt), gehts doch immer.
c ya,
nco2k
Verfasst: 13.12.2005 16:42
von ts-soft
nco2k hat geschrieben:abgesehen von floats (wird hoffentlich gefixt), gehts doch immer.
c ya,
nco2k
Das mit den Floats reicht doch schon. Es ist doch nirgends Dokumentiert, das eine Funktion, die nichts zurückgibt, dies 0 sein muß. Ist auch unsauberer Programmierstil.
Der nächste Optimizer oder ähnlich, merkt, dies ist keine Funktion, da kein ProcedureReturn, dann werden wir den Stack auch nicht aufräumen, oder ähnliches.
Verfasst: 13.12.2005 18:20
von jear
@Norbie
So erzwingst Du die Behandlung als Boolean und bekommst die 95 :
Code: Alles auswählen
x=-5
x=x%100+((#False Or (x<0))*100)
;x=-5+(1*100)
Debug x
Das wird hoffentlich mit 4.0 anders!