Difference between revisions of "Delphi compatible LCG Random"
From Free Pascal wiki
Jump to navigationJump to searchLine 10: | Line 10: | ||
// https://en.wikipedia.org/wiki/Linear_congruential_generator | // https://en.wikipedia.org/wiki/Linear_congruential_generator | ||
// The default Delphi RandomSeed is determined as zero. | // The default Delphi RandomSeed is determined as zero. | ||
− | {$mode objfpc | + | {$mode objfpc} |
interface | interface |
Revision as of 14:43, 26 March 2017
Delphi compatible random numbers
Many Freepascal programmers also maintain a sourcecode in Delphi.
Even if you have moved to Freepascal from Delphi you may have data that relies on Delphi's Random.
Here are compatible routines that generate Delphi-identical pseudo-random numbers:
unit drandom;
// Delphi compatible LCG random number generator routines for Freepascal.
// (c)2017, Thaddy de Koning. Use as you like
// Algorithm, Delphi multiplier and increment taken from:
// https://en.wikipedia.org/wiki/Linear_congruential_generator
// The default Delphi RandomSeed is determined as zero.
{$mode objfpc}
interface
function DelphiRandom: Double; overload;inline;
function DelphiRandom(range:integer):integer;overload;inline;
implementation
function IM:dword;inline;
begin
RandSeed := RandSeed * 134775813 + 1;
Result := RandSeed;
end;
function DelphiRandom: Double; overload;inline;
begin
Result := IM * 2.32830643653870e-10;
end;
function DelphiRandom(range:integer):integer;overload;inline;
begin
Result := IM * range shr 32;
end;
end.