Einzelnen Beitrag anzeigen

Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.018 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)

  Alt 20. Nov 2021, 20: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
  Mit Zitat antworten Zitat