AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

wenn INT64 voll ist

Ein Thema von DerKapitalist · begonnen am 6. Jan 2003 · letzter Beitrag vom 2. Jun 2003
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.553 Beiträge
 
Delphi 10.4 Sydney
 
#11
  Alt 6. Jan 2003, 14:18
Zitat von DerKapitalist:
ich denke die librarys bieten da die beste lösung. Oder meint ihr man könnte dem Compiler 128 bit beibringen *gg*
Nee, der Compiler arbeitet für 32-bit Systeme. 32-bit System unterstützen, von Haus aus, 64-bit Berechnung über das zusammenführen zweier Register. D.h., Delphi setzt auch nur auf diese Funktionalität auf. Die Prozessoren machen nicht mehr.

Wenn Du mehr haben willst, dann bleibt Dir nur der Umweg über oben genannte Bibliotheken.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#12
  Alt 6. Jan 2003, 14:35
Moin Kapitalist,

die Idee von Braingrenade stellt im Prinzip nichts anderes dar, als Du mit den Bibliotheken wirst erreichen können (mal abgesehen davon, dass seine Variante wohl deutlich schneller sein dürfte).

Da ja der Compiler maximal mit Int64 umgehen kann wirst Du es innerhalb einer Bibliothek für längere Werte kaum anders machen können, als bei Überlauf den nächsten Int64 um eins zu erhöhen.

Wahrscheinlich wird's sogar oft so ablaufen, dass es für jede Dezimalstelle ein Byte geben wird, so dass die Zahlen intern als dynamisches Byte Array abgebildet werden.

Einfach so als z.B. int64 angeben und dann einfach mit +/- rechnen wird bei solchen Datentypen nicht gehen, da es sich um Objekte handeln dürfte, mit Methoden die das Rechnen übernehmen, und das überladen von Operatoren kennt Pascal ja nun nicht.

Auch wenn's unwahrscheinlich ist, aber:
Eventuell würden solche Objekte in weiteren Delphi Versionen nicht mehr funktionieren, wohingegen das aufaddieren von int Typen wohl auch dort noch funktionieren sollte.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
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
Illuminator-23-5
(Gast)

n/a Beiträge
 
#14

große zahlen

  Alt 2. Jun 2003, 10:58
es gibt auch eine andere, lustige methode, mit großen zahlen exakt zu rechnen: ein string ist 255 Zeichen lang. Wenn man eine 255-Stellige zahl hat, wie weit kann man damit zählen? und eins dazuaddieren ist auch ganz einfach :

i := length(zahl);
while zahl[i] = 'F' do begin
Zahl[i] := '0';
dec(i);
end;

Zahl[i] := IntToStr(StrToInt(zahl[i])+1);
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#15
  Alt 2. Jun 2003, 11:02
Moin Illuminator,

Zitat von Illuminator-23-5:
ein string ist 255 Zeichen lang.
Ein ShortString schon, aber der übliche HugeString kann, theoretisch, bis zu ca. 2GB Zeichen aufnehmen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf