SortStructuredList sortiert Floats falsch. Bug?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

SortStructuredList sortiert Floats falsch. Bug?

Beitrag von Frogger »

Da war ich baff...
Zum ersten Mal war es nötig eine StructuredList nach Floats zu sortieren und dann das.

Hab ich da was falsch gemacht oder ist das ein Bug von PB?

Code: Alles auswählen

Structure test
  a.f
EndStructure

NewList test.test()



AddElement(test())
test()\a = 0.01

AddElement(test())
test()\a = 0.47

AddElement(test())
test()\a = -0.2

AddElement(test())
test()\a = -0.3

AddElement(test())
test()\a = 0.7


SortStructuredList(test(), 0, OffsetOf(test\a.f), #PB_Sort_Float)
Debug "kleine Zahlen zuerst..."
ResetList(test())
While NextElement(test())
  Debug test()\a
Wend
Debug ""

SortStructuredList(test(), 1, OffsetOf(test\a.f), #PB_Sort_Float)
Debug "große Zahlen zuerst..."
ResetList(test())
While NextElement(test())
  Debug test()\a
Wend
Ergebniss:

Code: Alles auswählen

kleine Zahlen zuerst...
0.00999999977648
0.46999999880791
0.69999998807907
-0.20000000298023
-0.30000001192093

große Zahlen zuerst...
-0.30000001192093
-0.20000000298023
0.69999998807907
0.46999999880791
0.00999999977648
Also für mich ist eine negative Zahl immer noch kleiner als eine noch so kleine positive Zahl.
[PB4.20]
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

stimmt, er sortiert auf erster ebene nach vorzeichen, und dann die beiden teile für sich nach größe des absolutwertes. ich kann mir auch nicht vorstellen das das so geplant ist. mit double das gleiche.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Das ist echt schade. Gibt es schon eine Procedur, die das richtig macht?
Die Suche hat da auch nicht viel geholfen.
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das sort prüft wohl nicht den typ.

schaut euch das mal an:

Code: Alles auswählen

Structure test
  StructureUnion 
    a.f
    b.l
  EndStructureUnion 
EndStructure 

NewList test.test() 



AddElement(test()) 
test()\a = 0.01 

AddElement(test()) 
test()\a = 0.47 

AddElement(test()) 
test()\a = -0.2 

AddElement(test()) 
test()\a = -0.3 

AddElement(test()) 
test()\a = 0.7 


SortStructuredList(test(), 0, OffsetOf(test\a.f), #PB_Sort_Float) 
Debug "kleine Zahlen zuerst..." 
ResetList(test()) 
While NextElement(test()) 
  Debug StrF(test()\a) + " - " + Str(test()\b)
Wend 
Debug "" 

SortStructuredList(test(), 1, OffsetOf(test\a.f), #PB_Sort_Float) 
Debug "große Zahlen zuerst..." 
ResetList(test()) 
While NextElement(test()) 
  Debug StrF(test()\a) + " - " + Str(test()\b)
Wend
wenn man jetzt noch bedenkt, dass ein negatives vorzeichen ein gesetztes höchstes bit bedeutet,
dann sieht man, dass die sortierung als "unsigned" eigentlich richtig ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Ist ein böser Fehler.
Seltsam, dass es noch niemandem aufgefallen ist.

Wie könnte man so eine Liste sortieren, dass es richtg und zuverlässig funktioniert?

Meine Structure für die LinkedList sieht so aus.

Code: Alles auswählen

Structure Stat
  Spieler.s
  Punkte_Akt.l
  Punkte_Alt.l
  Steigerung.f
  Aktualisierung.s
EndStructure
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du willst also nach steigerung sortieren? kann die auch negativ sein?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

du willst also nach steigerung sortieren? kann die auch negativ sein?
Ja, es ist eigendlich ein Gemisch aus positiven und negativen floats.
Alles Andere funktioniert gut mit SortStructuredList.
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ne sorry, weiß ich keine abhilfe.

höchstens dir ne eigene sort-routine schreiben aufgrund des quicksort oder eines anderen algos...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Dann bleibt mir wohl nichts anderes übrig. :(
[PB4.20]
horst
Beiträge: 70
Registriert: 08.09.2004 19:33
Wohnort: München
Kontaktdaten:

Beitrag von horst »

Frogger hat geschrieben:Dann bleibt mir wohl nichts anderes übrig. :(
Guck mal auf meine Website: QL Sort
horst
Antworten