Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.057 Beiträge
Delphi 2009 Professional
|
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
20. Nov 2021, 21:51
Delphi-Quellcode:
FUNCTION Formel101(a : Extended;
b : Extended;
Faktor : Extended;
Iteration : Longint;
Art : Integer ):LongInt;
VAR x,y,z : Extended;
aa, bb : Extended;
xx,yy : Extended;
xy : Extended;
Farbe : INTEGER;
BEGIN (* Apfelmann mit Spitze nach links *)
x := 0;
y := 0;
Farbe := 0;
aa := a + a;
bb := b + b + b;
xx := 0;
yy := 0;
REPEAT
z := xx - yy + aa; // x² - y² + 2a
xy := x * y;
y := xy + xy + bb; // 2 * x * y + 3b
x := z;
xx := x * x;
yy := y * y;
Farbe := Farbe + 1;
UNTIL (Farbe = Iteration) OR (xx + yy > Faktor);
Formel101 := GetFarbe(Farbe,xx,yy,xy,Iteration,art);
END;
Kein gutes Beispiel, denn: - Farbe := Farbe + 1;
schreibt man nicht, man schreibt Inc(Farbe);
. Macht auch ein bisschen was aus.
- Bei a + a würde ich vermuten, dass hier eine Multiplikation besser wäre, da im Prinzip der Exponent inkrementiert wird, wenn Compiler/CPU so intelligent sind. Unter Win32 (allerdings sonst nirgendwo) könnte man eventuell auch ein PWord auf @Extended setzen und PWord^ inkrementieren, aber Endianness macht das kompliziert. Wird aber eh nur einmal ausgefühlt.
- Wenn ich nicht komplett auf dem Schlauch stehe, hat die Variable z überhaupt keine Funktion und man kann man das noch weiter kürzen:
Delphi-Quellcode:
REPEAT
xy := x * y;
y := xy + xy + bb; // 2 * x * y + 3b
x := xx - yy + aa; // x² - y² + 2a
xx := x * x;
yy := y * y;
Inc(Farbe);
UNTIL (Farbe = Iteration) OR (xx + yy > Faktor);
Janni 2005 PE, 2009 PA, XE2 PA
|
|
Zitat
|