[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
{
 HG> Did any one have an algorithm to generate random numbers?
 HG> I know Borland Pascal have de function RANDOM but what I realy
 HG> want is the code to do that. Any Language is ok, but I prefer
 HG> Pascal.
 Here's a small random number unit that is quite good..
}
unit Random;
interface
procedure SeedRandomNum(ASeed : word);
procedure InitRandom;
function  RandomNum : word;
function  RandomRange(ARange : word): word;
implementation
var
   Fib   : array[1..17] of word;
   i, j  : word;
procedure SeedRandomNum(ASeed : word);
var x : word;
begin
   Fib[1] := ASeed;
   Fib[2] := ASeed;
   for x := 3 to 17 do
      Fib[x] := Fib[x-2] + Fib[x-1];
   i := 17;
   j := ASeed mod 17;
end;
procedure InitRandom;
begin
   SeedRandomNum(MemW[$40:$6C]);
end;
procedure SeedRandom(ASeed : word);
var x : word;
begin
   Fib[1] := ASeed;
   Fib[2] := ASeed;
   for x := 3 to 17 do
      Fib[x] := Fib[x-2] + Fib[x-1];
   i := 17;
   j := ASeed mod 17;
end;
function RandomNum : word;
var k : word;
begin
   k := Fib[i] + Fib[j];
   Fib[i] := k;
   dec(i);
   dec(j);
   if i = 0 then i := 17;
   if j = 0 then j := 17;
   RandomNum := k;
end;
function RandomRange(ARange : word): word;
begin
   RandomRange := RandomNum mod ARange;
end;
end.
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]