51 lines
1.3 KiB
Ada
51 lines
1.3 KiB
Ada
with
|
|
ada.Numerics.Float_random,
|
|
ada.Numerics.Discrete_random;
|
|
|
|
package body any_Math.any_Random
|
|
is
|
|
use ada.Numerics;
|
|
|
|
package Boolean_random is new ada.numerics.discrete_Random (Boolean);
|
|
|
|
real_Generator : Float_random .Generator;
|
|
boolean_Generator : Boolean_random.Generator;
|
|
|
|
|
|
|
|
function random_Boolean return Boolean
|
|
is
|
|
begin
|
|
return Boolean_random.Random (boolean_Generator);
|
|
end random_Boolean;
|
|
|
|
|
|
|
|
function random_Real (Lower : in Real := Real'First;
|
|
Upper : in Real := Real'Last) return Real
|
|
is
|
|
base_Roll : constant Float := Float_random.Random (Real_Generator);
|
|
begin
|
|
return Lower
|
|
+ Real (base_Roll) * (Upper - Lower);
|
|
end random_Real;
|
|
|
|
|
|
|
|
function random_Integer (Lower : in Integer := Integer'First;
|
|
Upper : in Integer := Integer'Last) return Integer
|
|
is
|
|
Modulus : constant Positive := Upper - Lower + 1;
|
|
base_Roll : constant Float := Float_random.Random (Real_Generator);
|
|
begin
|
|
return Lower
|
|
+ Integer (Float (Modulus) * base_Roll) mod Modulus;
|
|
end random_Integer;
|
|
|
|
|
|
|
|
begin
|
|
Boolean_random.reset (boolean_Generator);
|
|
Float_random .reset ( real_Generator);
|
|
end any_math.any_Random;
|