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 :allright:

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 :mrgreen:

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. :wink:

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!