Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
721 Beiträge
 
Delphi 11 Alexandria
 
#39

AW: Besseres Random() - eure Vorschläge

  Alt 7. Jul 2020, 23:39
Es ist mir bewusst, dass der Code aus #30 zusammengefasst werden kann. Es ging ja darum den ASM Code Zeile für Zeile in Delphi zu schreiben.

Deine Zusammenfassung von #30 liefert bei mir bei einem Startwert von randseed=1 bereits beim zweiten Aufruf von random(1000000) nicht mehr den korrekten Wert zurück. Es liegt wahrscheinlich an meinen Compilerschaltern (?). Wenn du's so geschrieben hättest...

Delphi-Quellcode:
function random(aRange: Integer): Integer;
begin
{$Q-}
{$R-}
  RandSeed := RandSeed * 134775813 + 1; // 3*17*131*20173
  Result := (aRange * Cardinal(RandSeed)) shr 32; // aka Result := MulDiv(aRange, RandSeed, $100000000);
end;
...dann wäre auch mein australisches Delphi zufrieden.

Infos zum Verfahren:
https://de.wikipedia.org/wiki/Kongruenzgenerator
Michael Gasser
  Mit Zitat antworten Zitat