![]() |
128 bit Integer und mehr
hi
ich muss vorzeichenlose 128bit (und vllt mehr) Zahlen vergleichen können. Da 128bit nicht nativ unterstützt wird, muss ich wohl ein record verwenden.
Delphi-Quellcode:
Wie kann ich solche 128bit Werte miteinander Vergleichen (< >)?
type
T128bit_1 = record Hi, Lo : Int64; end; oder immer positiv T128bit_2 = record Value : Array[1..4] of Cardinal; end; Es gibt doch da sicher schon Definitionen dafür, so dass ich mir meinen Kopf nicht zerbrechen muss :wall: Fälle: Value_1 > Value_2 Value_1 < Value_2 Ansatz: Über Differenzbildung Meiner Meinung nach funktioniert T128bit_1 nicht, da es hier auf jeden Fall auch falsche Differenzen geben kann, weil Int64 vorzeichenbehaftet ist. thx |
Re: 128 bit Integer und mehr
Der 2. Ansatz ist imho sinnvoller. Falls du negative Werte zulassen willst, kannst du ja das höchste Bit des höchsten Cardinals selbst verwalten über maskieren.
Vergleichen ginge recht einfach im Prinzip: Fange beim höchstwertigen Cardinal an. Ist eines größer als das andere, bist du schon fertig. Sind sie gleich, zum nächst kleinerwertigen, und so weiter und so fort. Haste das eine Bit für negative Zahlen mit drin, muss das natürlich als erstes ausgewertet werden. Ist des bei 2 zu vergleichenden Werten schon unterschiedlich, ist eine größer/kleiner Aussage trivial, sind sie gleich musst du im Falle negativer Zahlen alle weiteren Vergleiche lediglich umkehren "not(a>b)" z.B.. Also dort dann noch eine Fallunterscheidung vorschalten. Ich bin sicher Hagen könnte mit etwas deutlich performaterem aufwarten ;), aber das ist denke ich ein gut verständlicher naiver Ansatz, der auch einigermaßen flott abzuhandeln sein sollte. |
Re: 128 bit Integer und mehr
Es sind nur positive Werte zugelassen.
Soweit so gut sollte es funktionieren, oder?
Delphi-Quellcode:
type
T128bit = record Value : Array[0..3] of Cardinal; end; //1 : V1>V2, -1 : V2>V1, 0 : V2==V1 function Compare(V1,V2 : T128bit) : Integer; var i : Integer; begin result := 0; for i := 3 downto 0 do begin if V1.Value[i] > V2.Value[i] then begin result := 1; break; end else if V2.Value[i] > V1.Value[i] then begin result := -1; break; end end; end; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: 128 bit Integer und mehr
Okay das stimmt alles soweit.
Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz