with Machines; use Machines;
with Standard_Mathematical_Functions; use Standard_Mathematical_Functions;
package body Standard_Random_Numbers is
a : constant integer := 13849;
m : constant integer := 65536;
c : constant integer := 56963;
seed : integer := Process_Id;
function Random ( lower,upper : integer ) return integer is
f : double_float;
begin
f := Random; -- f in [-1,1]
f := 0.5*(double_float(upper-lower)*f + double_float(lower+upper));
-- f in [lower,upper]
return integer(f); -- rounding the result to integer number
end Random;
function Random return double_float is
x : double_float;
begin
seed := (a*seed + c) mod m;
x := double_float(seed)/double_float(m);
x := 2.0 * x - 1.0;
return x;
end Random;
function Random return Complex_Number is
begin
return Create(Random,Random);
end Random;
function Random ( modulus : double_float ) return Complex_Number is
arg : double_float;
begin
arg := PI*Random; -- in [-pi,+pi]
return Create(modulus*COS(arg),modulus*SIN(arg));
end Random;
function Random1 return Complex_Number is
arg : double_float;
begin
arg := PI*Random; -- in [-pi,+pi]
return Create(COS(arg),SIN(arg));
end Random1;
end Standard_Random_Numbers;