![]() |
TBigUInt - Noch ein Datentyp für große Zahlen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Also ich wage mich dann mal mit meiner TBigUInt Unit auf den "Markt" ;) Das Projekt ist aus rein privatem Interesse entsprungen, von daher ggf nicht besonders konkurrenzfähig. Aber ich denke für den ein oder anderen mit Delphi2006 oder höher könnte TBigUInt trotzdem ganz interessant sein. Vorraussetzungen
Features
"Bugs"
Beispiele
Delphi-Quellcode:
uses BigUInt;
// Eine Funktion die die Fakultät einer Zahl berechnet function Fak(n: TBigUInt): TBigUInt; begin if (n = 0) or (n = 1) then Result := 1 else Result := n*Fak(n-1); end; // Zum Vergleich die gleiche Funktion für den normalen Cardinaldatentyp function Fak(n: Cardinal): Cardinal; begin if (n = 0) or (n = 1) then Result := 1 else Result := n*Fak(n-1); end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a: TBigUInt; begin a := Power(1024,100); // Überladene Power-Funktion aus der Math-Unit (Math muss nicht extra eingebunden werden) Caption := IntToStr(a); // Überladenes IntToStr für TBigUInts. ACHTUNG: Das da kann recht lange dauern // weil IntToStr wie gesagt noch etwas langsam ist. end;
Delphi-Quellcode:
Viel Spaß mit der Unit. Freue mich schon auf Kritik. Vorallem auf (hoffentlich auch) positive :mrgreen:
procedure TForm1.Button1Click(Sender: TObject);
var a,b: TBigUInt; begin a := StrToInt('1234567891011121314151617181920'); b := StrToInt('98765432109876543210541'); Caption := IntToStr(Min(a,b)); end; Gruß Neutral General |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
also anhären tut sich dein Teil ja toll, nur leider kann ichs mit D5Pro nicht testen, schade.
|
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Zitat:
|
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Anstatt StrToInt oder IntToStr kannst du doch auch eine direkte Umwandlung von und nach String in den Record implementieren, oder? Dadurch geht dann folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a,b: TBigUInt; begin a := '1234567891011121314151617181920'; b := '98765432109876543210541'; Caption := Min(a,b); end; |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Hi,
Ja das ginge durchaus. Aber die schreibweise ist halt unüblich und kann eventuell vorallem bei Anfängern für Verwirrung oder Missverständnisse sorgen. Zahlen sind halt keine Strings. Aber falls die breite Masse implizite Konvertierung von String nach TBigUInt fordern sollte, so würde ich dem meinetwegen auch nachkommen. Eventuell :stupid: |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Denn dann meckert der Komposter nicht mehr, wenn man einen wahllosen String zuweist. .Net liefert hier schon ein IMHO hübsches pattern für solche Umwandlungen:
Delphi-Quellcode:
und/oder
a := TBigUInt.Parse('123');
Delphi-Quellcode:
...
if not TBigUInt.TryParse('123', out a) then
|
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Na ja?! Auch wenn ich es mangels Compiler nicht testen kann, fällt doch sofort eine Inkonsequenz auf: Wenn a < b ist, soll a - b = 0 ein. Das ist ja wohl mathematisch nicht ganz korrekt :) Wenn DU Dich auf positive Zahlen beschränken willst, solltest Du wie bei a/0 eine Exception benutzen.
|
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Aber ich bin sowieso am überlegen ob ich nicht noch negative Zahlen einbauen soll. Ich glaube das wäre nicht so viel Arbeit. |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Das IntToStr müßte man auch kürzen können ...
zumindestens die 0-Prüfung vorher ist nicht sooo wichtig, wenn man die Schleife andersrum (als Repeat-Until) definiert und ich hoffe beim Format hab ich den richtigen Parameter gewählt.
Delphi-Quellcode:
Und wozu war eigentlich das [/i]tmp:=Value;[/i] vor der Schleife?
function IntToStr(Value: TBigUInt): String;
var tmp: TBigUInt; begin repeat tmp := Value mod 1000000000; Value := Value div 1000000000; if Value <> 0 then Result := Format('%.9d%s', [tmp[0], Result]) else Result := Format('%d%s', [tmp[0], Result]); until Value = 0; end; ansonsten kannst auch gern mal nach ![]() ![]() - TBitInt ist in etwa sowas wie Deines - und die MiniMathLib ist sowas wie eine erweiterbare Masterklasse für solche Datentypen hab leider nicht so die Zeit daran weiterzuarbeiten (sind halt nur kleine Spielereinen für Nebenbei :cry: ) |
Re: TBigUInt - Noch ein Datentyp für große Zahlen
Zitat:
Zitat:
Zitat:
Also ich habe mir angeschaut wie es da gemacht wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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 by Thomas Breitkreuz