Title: Performance lost from Delphi 3 to Delphi 6
Question: I recently wrote a program, that calculates square-roots up to
100000 digits. (Sqrt(2) = 1.414213562373095 ....)
For 1000 digits it needs 200 msec. on a Pentium 4 PC with Delphi 3. With Delphi 6 it needs more than 440 msec. after a new
compilation. (??????)
Answer:
I := 1; {* Wichtig: I Ist nach den obigen Schleifen nicht definiert *}
{* Zentrale Schleife, die die Nachkommastellen mit Vektoroperationen *}
{* berechnet. Jede Komponente ist eine Ziffer *}
While (I
Application.ProcessMessages;
If (I/100) = Trunc(I/100) Then Begin
ZeitY := GetTickCount - ZeitX;
ZeitReal := ZeitY / 1000.0;
ZeitR.Text := FloatToStrF(ZeitReal, ffFixed, 6, 3) + ' sec.';
Str(I, AnzStel);
StelleX.Text := AnzStel;
End;
Stop.Enabled := True;
Clear.Enabled := False;
{* Ausmultiplizieren in Vektorschreibweise *}
For W := -1 To I Do Begin
Inc(K[W + I], 2 * A[W]);
End; {* For *}
K[2 * I] := K[2 * I] + 1;
{* Stellenbertrag *}
For W := 2 * I DownTo -1 Do Begin
Z := Trunc(K[W]/10);
Inc(K[W - 1], Z);
Dec(K[W], 10 * Z);
End; {* For *}
{* 10'000 fache Eingabe und 10'000 fache Multiplikationssumme *}
Summe1 := Round(1.0E06 * K[-2] + 1.0E05 * K[-1] + 1.0E04 * K[0] +
1000.0 * K[1]);
Summe1 := Summe1 + Round(100.0 * K[2] + 10.0 * K[3] + 1.0 * K[4]);
Summe2 := Round(10000.0 * ZAHL);
{* Grsse der Eingabe erreicht / Oder letzte Ziffer = 9 *}
If (Summe1 = Summe2) Or (A[I] = 9) Then Begin
Inc(I);
For W := -2 To 2 * I Do Begin
K[W] := S[W];
End; {* For *}
End {* If (Summe1 ... Then *}
{* Sonst: Letzte Ziffer um 1 erhhen *}
Else Begin
Inc(A[I]);
For W := -2 To 2 * I Do Begin
S[W] := K[W];
End; {* For *}
End; {* IF (Summe1 ... Else *}
End; {* While I