Mega Code Archive

 
Categories / Delphi / Forms
 

Performance lost from Delphi 3 to Delphi 6

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