Thema: Delphi wenn INT64 voll ist

Einzelnen Beitrag anzeigen

MatrixStormProgrammierer

Registriert seit: 26. Mai 2003
10 Beiträge
 
Delphi 6 Personal
 
#13

ja, es geht größer...

  Alt 30. Mai 2003, 12:34
Wie es auf dem PC so üblich geworden ist, kann man alles mögliche emulieren. Da nun unsere CPUs nun "nur" 32 Bit Register besitzen, ist theoretisch eine Berechnung in größeren Wertebereichen scheinbar unmöglich...

1.) Tatsache ist jedoch, das es Int64 (64 Bit groß) gibt...
Int64 wird teilweise emuliert und teilweise vom CPU unterstüzt,
indem z.B. der Assemblebefehl "mul" Produkte in eax und edx
aufteilt...

2.) Was ist nun wenn der Int64-Bereich zu Ende geht?
Naja, jede Rechenoperation ist ein Algorithmus (nicht umgekehrt!).
Es gibt also tatsächlich eine Möglichkeit größere Zahlen zu
verwenden. Ein einfaches Beispiel für eine 2048 Bit große Zahl
möchte ich kurz für den Befehl "inc" erläutern, bei weiteren Fragen
schreibt mir einfach per ICQ, 70036952.

Um alle Daten einer 2048 Bit (256 Byte) großen Zahl zu erfassen benötigen wir ein Feld aus Bytes... (ich empfehle Bytes, und nicht etwas größere Zahlentypen).

                 type mynumber = array[0..$ff] of byte; Ein Befehl inc für den Typ "mynumber" würde also z.B. so aussehen:
Delphi-Quellcode:
procedure inc(var num : mynumber;BytesSummand : byte); overload;
var
    i,
    zwischenerg : word; // besser, falls jemand größere Zahlen nimmt
begin
 zwischenerg:=word(ByteSummand);
 for i:=0 to sizeof(mynumber)-$1 do
  begin
   zwischenerg:=(zwischenerg and $ff) + num[i];
   num[i]:=zwischenerg and $ff;
   zwischenerg:=zwischenerg shr $8;
   if (zwischenerg = 0) then break; // kein Rest da...
  end;
end;
ps: hab das eben auf "die Schnelle" geschrieben, falls es nicht funzt, meldet euch bitte...

cu sagt MatrixStormProgrammierer...
Genial Menschen beginnen große Werke,
fleißige Menschen vollenden sie.
  Mit Zitat antworten Zitat