![]() |
Zitat:
Wenn Du mehr haben willst, dann bleibt Dir nur der Umweg über oben genannte Bibliotheken. |
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. |
ja, es geht größer...
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).
Delphi-Quellcode:
Ein Befehl inc für den Typ "mynumber" würde also z.B. so aussehen:
type mynumber = array[0..$ff] of byte;
Delphi-Quellcode:
ps: hab das eben auf "die Schnelle" geschrieben, falls es nicht funzt, meldet euch bitte...
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; cu sagt MatrixStormProgrammierer... |
große zahlen
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); |
Moin Illuminator,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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