Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#13

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream

  Alt 31. Mai 2008, 13:32
Aufgrund des Themas
Exponentieren und dann Modulo: große Zahlen - speziell die Beiträge #30 bis #33
hab ich mal die BigInt-"Klasse" extrahiert.

Systemvoraussetzung ebenfalls mindestens Delphi/BDS 2006 incl. der nötigen Updates.

Wertebereich:
von -6.703.903.964.971.298.549.787.012.499.102.923.063. 739.682.910.296.196.688.861.780.
721.860.882.015.036.773.488.400.937.149.083.451.71 3.845.015.929.093.243.025.426.876.941.405.973.284. 973.216.824.503.042.048
bis +6.703.903.964.971.298.549.787.012.499.102.923.063 .739.682.910.296.196.688.861.780.
721.860.882.015.036.773.488.400.937.149.083.451.71 3.845.015.929.093.243.025.426.876.941.405.973.284. 973.216.824.503.042.047

+/- 6.703e153
-2^511 .. 2^511 - 1

512 Bit im Zweierkomplement = 152(153) Dezimalstellen
Int64 = 18(19) Dezimalstellen


die Klasse ist fast identisch mit dem Original
- Funktion .OneBit fehlt (braucht aber vermutlich eh keiner)
- TnStream durch TStream ersetzt
- interne Funktionen auf Private gesetzt
- keine ASM-Optimierungen (gibt aber eh kaum welche)
- und es wird natürlich nur diese eine Unit benötigt


Vieles wie beim "normalen" Integer auch nutzbar:

< <= = <> >= >
+ - div mod
and or xor not shl shr
Inc Dec

und als Funktionen in der Klasse und einiges nochmals als Einzelfunktion in der Unit (siehe nach der Klassendefinition) unter Anderem dieses:
DivMod Power LdExp LtExp LxExp ExpMod Log2 Log10 LogN Radic Sqr Sqrt Fibonacci RoundTo RoL RoR



da dieses einen "normalen" Record darstellt, ist auch keine Initialisierung/Finalisierung nötig, wie z.B. bei Objekten.
und man kann diesen Record auch wie einen verwenden ... z.B. Speichern und Laden:
Delphi-Quellcode:
Var BI: TBigInt;
  F: File...;
  S: TStream;
  P: Pointer;

BlockWrite(f, BI, SizeOf(BI));
S.Write(BI, SizeOf(BI));
MoveMemory(P, @BI, SizeOf(BI));


ich hoff mal es läuft alles soweit.
ansonsten wird es hiervon nicht all zu oft ein Update geben können.
(ist halt etwas Aufwand jede Änderung im großen Projekt auch gleich hier einzubauen)

[edit=Daniel G]Wertebereich zum Vermeiden des horizontalen Scrollens mal umgebrochen. Tut ja nicht not, sowas...[/edit]
Angehängte Dateien
Dateityp: pas bigint_203.pas (95,6 KB, 73x aufgerufen)
Dateityp: dpr biginttest_970.dpr (5,6 KB, 49x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat