Hallo,
hier noch ein Ansatz zur Beschleunigung der Simulation:
loop unrolling. Bei dieser Technik werden mehrere Schleifendurchläufe ausprogrammiert, was im aktuellen Fall die Verwaltung des zusätzlichen Bitzählers erspart. Weiterhin sollte die Anzahl der Sprungbefehle auf ein Minimum reduziert werden:
Delphi-Quellcode:
var
[...]
y : Byte;
begin
[...]
Akt := Config.Start;
if (Akt <> Config.Ziel) then
repeat
R := Random($10000);
y := Ord(Odd(r));
Inc (Akt, y - Ord(Akt > 3) shr y);
Inc (C); if (Akt = Config.Ziel) THEN Break;
y := Ord(Odd(r shr 1));
Inc (Akt, y - Ord(Akt > 3) shr y);
Inc (C); if (Akt = Config.Ziel) THEN Break;
y := Ord(Odd(r shr 2));
Inc (Akt, y - Ord(Akt > 3) shr y);
Inc (C); if (Akt = Config.Ziel) THEN Break;
[...]
y := Ord(Odd(r shr 14));
Inc (Akt, y - Ord(Akt > 3) shr y);
Inc (C); if (Akt = Config.Ziel) THEN Break;
y := Ord(Odd(r shr 15));
Inc (Akt, y - Ord(Akt > 3) shr y);
Inc (C); if (Akt = Config.Ziel) THEN Break;
until False;
[...]
end;
Eine solche Optimierung verbessert zwar die Laufzeit, nicht aber die Lesbarkeit des Quelltextes...
Gruß Hawkeye