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;