x=x%100+((x<0)*100) arbeitet nicht wie zu erwarten!

Anfängerfragen zum Programmieren mit PureBasic.
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

x=x%100+((x<0)*100) arbeitet nicht wie zu erwarten!

Beitrag 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!
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Die Auswertung von Boolschen Ausdrücken unabhängig von If, While und Until gibt es leider noch nicht :(
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Norbie
Beiträge: 134
Registriert: 29.08.2004 12:45
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von Norbie »

Das ist ja riesengroße Scheiße!

Ist das in V4 geplant?
http://www.nevu.de/ Künstliche Intelligenz, die letzte Herausforderung!
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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?
Zuletzt geändert von Batze am 13.12.2005 16:23, insgesamt 1-mal geändert.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Bei mir gehts zwar trotzdem aber du hast natürlich recht.
Wann geht das denn nicht?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

abgesehen von floats (wird hoffentlich gefixt), gehts doch immer. :?

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag 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!
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Antworten