Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Wosi,
9. Okt 2017
Danke für den Hinweis, klassischer Off-By-One-Fehler. Richtig ist natürlich:
function MyRand(LimitPlusOne : Integer): Integer;
var
DividedRange: Integer;
begin
DividedRange := ((LimitPlusOne - 1) div 4) + 1;
Result := Random(DividedRange) * 4;
end;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Wosi,
9. Okt 2017
Das Laufzeit-Verhalten dieser Funktion ist vom Zufall abhängig. Die Terminiertheit kann für diese Funktion nicht bewiesen werden. Damit birgt sie die theoretische Gefahr eines Programm-Absturzes. In der Praxis wird sie meist in Sekundenbruchteilen ein korrektes Ergebnis liefern. In größeren Systemen sollten derartige Algorithmen vermieden werden. Stattdessen kann die Funktion auch mit konstantem...