Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   128 bit Integer und mehr (https://www.delphipraxis.net/104644-128-bit-integer-und-mehr.html)

Dezipaitor 8. Dez 2007 01:14


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:
type
  T128bit_1 = record
     Hi, Lo : Int64;
  end;
oder immer positiv
  T128bit_2 = record
    Value : Array[1..4] of Cardinal;
  end;
Wie kann ich solche 128bit Werte miteinander Vergleichen (< >)?
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

dizzy 8. Dez 2007 01:27

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.

Dezipaitor 8. Dez 2007 01:51

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 8. Dez 2007 07:24

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

Dezipaitor 8. Dez 2007 13:15

Re: 128 bit Integer und mehr
 
Okay das stimmt alles soweit.
Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz