Das mit dem Terminieren ist richtig, aber erstens war es nur ein Vorschlag, zweitens sollte man einen Basis-Generator, der keine durch 4 teilbaren Zahlen liefert, in die Tonne treten, drittens funktioniert mein Vorschalg in der Praxis, während Deiner total daneben sein kann. Beispiel: Für Range=22 wird bei Dir nie der Wert 20 geliefert.
Danke für den Hinweis, klassischer Off-By-One-Fehler. Richtig ist natürlich:
Delphi-Quellcode:
function MyRand(LimitPlusOne : Integer): Integer;
var
DividedRange: Integer;
begin
DividedRange := ((LimitPlusOne - 1) div 4) + 1;
Result := Random(DividedRange) * 4;
end;