Zitat:
Gibt es irgendwo eine Dokumentation für alle Funktionen der
Unit NInts? Das fände ich ziemlich hilfreich, denn ohne weiss ich noch nichtmal wie ich überhaupt eine Variable des typs IInteger erzeuge...
Nach dem Entpacken hast du 2 Möglichkeiten:
1.) im Ordner \LibIntf\ sind alle PASCAL Header der Units enthalten. Da kannst du nachschlagen.
2.) im Ordner \Part_II\Demo\ findest du ein DEMO Projekt. In diesem wird die Benutzung der IInteger demonstriert
Ein IInteger ist wie ein normaler Integer anzusehen nur mit dem Unterschied
a.) das er so groß wir der gesamte Speicher sein könnte (als Zahl wohl gemerkt)
b.) er mit eigenen Funktionen rechnen muß (in
Unit NInts)
ansonsten gibts fast keine Unterschiede, besonders nicht bei Zuweisungen, Allokation und Freigeben. Darum musst du dsich nicht kümmern und DECMath macht das alles automatisch für dich.
Beispiel
Delphi-Quellcode:
procedure DEMO;
var
Sum: IInteger;
function DoTest(const N: IInteger): Boolean; register;
begin
NAdd(Sum, N);
Result := False;
end;
var
A,B,C: IInteger;
X: IIntegerArray;
begin
// A,B,C sind hier schon auf NIL initialisiert. NIL ist per Definition im DECMath identisch zum Zahlenwert 0 !!
NSet(A, 12); // A := 12;
NSet(B, A); // B := A; // @B == @A, B und A sind gleiches Speicherobjekt
C := B; // C := B := A;
NAdd(B, C); // B := B + C;
SetLength(X, 3);
X[0] := A;
X[1] := B;
X[2] := C;
NForEach(X, @DoTest); // für jedes Element eine Callback -> DoTest aufrufen.
// Diese Callback kann auf unsere Variablen im Stack zugreifen, hier Sum !!
WriteLn( NStr(Sum) ); // ergibt Sum := A + B + C;
end;
Wie du siehst, nichts freigeben, nichts allozieren, alles wird autom. gemacht.
Zitat:
if i < round(sqrt(zahl)) then
Delphi-Quellcode:
var
T: IInteger;
begin
NSqrt(T, Zahl); // T := Zahl^0.5
if NCmp(NInt(I), T) < 0 then ;
end;
1.) NSqrt(T, Zahl), berechne Quadratwurzel der Zahl und speichert das Resultat in T
2.) NInt(I), wandelt I in einen IInteger um
3.) NCmp(NInt(I), T) vergleich I mit T und gibt < 0 zurück wenn I < T, = 0 wenn I == T und > 0 wenn I > T.
Also nur 1 Variable und 1 Zeile Source mehr
Gruß Hagen