[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]