Operatorproblem

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Operatorproblem

Beitrag von Andesdaf »

Hallo!

Code: Alles auswählen

Procedure Wert1 (W1.s)
  ProcedureReturn Val(W1)
EndProcedure

Procedure Wert2 (W2.s)
  ProcedureReturn Val(W2)
EndProcedure

Procedure Werti1 ()
  ProcedureReturn 1
EndProcedure

Procedure Werti2 ()
  ProcedureReturn 2
EndProcedure


wert.i = 0
werti.i = 0

For i = 1 To 10
  wert + Wert1("1")*100 + Wert2("2")*50
  werti + Werti1()*100 + Werti2()*50
Next

Debug wert
Debug werti
Müsste doch eigentlich dasselbe rauskommen, oder?
werti stimmt, wert nicht.

Unter PB 4.2 ist es richtig.
Win11 x64 | PB 6.20
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 »

> Müsste doch eigentlich dasselbe rauskommen, oder?
ja, ist ein Bug, der in ähnlicher Form bei mehreren Stringoperationen kommt.

Abhilfe wäre sauberes Coding:

Code: Alles auswählen

Procedure Wert1 (W1.s)
  Protected result = Val(W1)
  ProcedureReturn result
EndProcedure

Procedure Wert2 (W2.s)
  Protected result = Val(W2)
  ProcedureReturn result
EndProcedure

Procedure Werti1 ()
  ProcedureReturn 1
EndProcedure

Procedure Werti2 ()
  ProcedureReturn 2
EndProcedure


wert.i = 0
werti.i = 0

For i = 1 To 10
  wert + Wert1("1")*100 + Wert2("2")*50
  werti + Werti1()*100 + Werti2()*50
Next

Debug wert
Debug werti
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
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

danke. wusste nicht, dass das bei ProcedureReturn nicht sauber ist.
Win11 x64 | PB 6.20
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 »

Andesdaf hat geschrieben:danke. wusste nicht, dass das bei ProcedureReturn nicht sauber ist.
Das sag ich so, in PB ist das eigentlich ok, aber da andere Sprachen sowas
meist auch nicht unterstützen, mache ich es lieber auf nummer sicher :wink:
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
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

wenn es so geht und der Bug anscheinend bekannt ist, ist das Problem ja
aus dem Weg geschafft und eine Lösung vorhanden.
Win11 x64 | PB 6.20
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 »

Den Bug sollteste schon im engl. melden, ist ja einer.
Aber als besonders wichtig würde ich den nicht einstufen.
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
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

bleibt trotzdem ein Bug finde ich

denn Debug Wert1("1") gibt korrekt 1 zurück

wenn man es so macht

Code: Alles auswählen

wert.i = 0 
werti.i = 0 

For i = 1 To 10 
  a = Wert1("1")*100
  b = Wert2("2")*50
  wert + a + b 
  werti + Werti1()*100 + Werti2()*50 
Next 

Debug wert 
Debug werti
funktioniert es

In 4.2 hat es noch funktioniert, da wurde wert + Wert1("1")*100 + Wert2("2")*50 korrekt ausgewertet
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wurde das nicht schon längst gemeldet?

das ist ein ganz allgemeines Problem mit der direkten Verwendung von Rückgabewerten,
egal ob in ProcedureReturn, oder in anderen Zusammenhängen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

@Andesdaf
Du hast im engl. die funktionierende Version von mir gepostet, wie soll Fred
so den Fehler sehen, bring das mal in Ordnung, bitte :wink:
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
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

oh, habe ich jetzt korrigiert.

Und wie ts schon gesagt hab, im engl. Forum gepostet.

[Konnte es mir nicht nehmen lassen, auch im engl. Forum die Schweine aufzusuchen]
Zuletzt geändert von Andesdaf am 22.03.2009 19:36, insgesamt 1-mal geändert.
Win11 x64 | PB 6.20
Antworten