SortStructuredList sortiert Floats falsch. Bug?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Frogger hat geschrieben:Dann bleibt mir wohl nichts anderes übrig. :(
Oder Steigerung vor der Sortierung mit einer Zahl addieren das alles im Plusbereich liegt und nach dem sortieren diese Zahl wieder abziehen, dann brauchst du keine eigene Sortierroutine.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Oder Steigerung vor der Sortierung mit einer Zahl addieren...
Das ist es :allright: :allright:
Wieso bin ich nicht sofort drauf gekommen :freak:
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das ist wirklich ne gute idee.

aber man muss drauf achten, dass man die genauigkeit nicht verlässt.
den "offset" so gering wie möglich halten.
also, wenn die "steigerung" ursprünglich in 100stel schritten vorliegt,
ist es tötlich, 10Mio zu addieren für die sortierung.
wenn der bereich von "steigerung" recht groß ist,
evtl. auf double ausweichen, um auf nummer sicher zu gehen.

achja.. natürlich könnte auch ein umsteigen auf fixkomma abhilfe schaffen...;)
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 »

Die Steigerung wird in % angegeben also wäre das dann kein Problem.
Den "offset" hab ich jetzt bei 1000.
Es wird nicht mehr als +100% angezeigt aber es ist durchaus möglich auf -1000% zu kommen.
Beispielsweise nach einer heftigen Schlacht mit viel Verlust. (es ist für ein Allytool, falls sich jemand wundert)
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wie gesagt, die verwendung von fixkomma-zahlen für sowas ist auch recht praktisch.

notfalls kann man innerhalb der rechnung zuerst ein float casten, um ein float-ergebnis zu erhalten...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
steini
Beiträge: 7
Registriert: 02.02.2006 13:57

Beitrag von steini »

Hatte ein ähnliches Problem
evtl kann dir das ja helfen.

Code: Alles auswählen

Structure dist
  nr.l
  val.f
EndStructure
Global NewList vlist.dist()

SortStructuredList(vlist(), 0, OffsetOf(dist\val), #PB_Sort_Long )
Obwohl val fom type float ist hat das Sortieren mit Long funktioniert.

Hab aber zu Sicherheit beides auf Double geändert
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das halte ich eher für zufall.
du müsstest die routine mal nachtesten mit einem ausreichens großen wertebereich.
wenn nämlich ersteinmal der exponent unterschiedlich genug ist,
dann kann eine interpretation als Long auch nicht mehr greifen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

Beitrag von Peloka »

Mein Tip wäre alle Zahlen mit einem Fixwert zu addieren,
dann sortieren,
dann wieder Fixwert subtraieren.
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Meine Idee wäre den Quicksort einfach selbst schreiben.

Es gibt dazu auch Beispiel in der PureArea und im Forum sicherlich auch.
Einfach mal suchen.
Antworten