AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

128 bit Integer und mehr

Ein Thema von Dezipaitor · begonnen am 8. Dez 2007 · letzter Beitrag vom 8. Dez 2007
Antwort Antwort
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#1

128 bit Integer und mehr

  Alt 8. Dez 2007, 02:14
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

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
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: 128 bit Integer und mehr

  Alt 8. Dez 2007, 02:27
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.
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: 128 bit Integer und mehr

  Alt 8. Dez 2007, 02:51
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;
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
8. Dez 2007, 08:24
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: 128 bit Integer und mehr

  Alt 8. Dez 2007, 14:15
Okay das stimmt alles soweit.
Danke.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 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