lace_math_0.1.0_3ab67197/source/generic/any_math-any_random.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;