File : random_numbers.adb


------------------------------------------------------------------------------
--
--  package Random_Numbers (body)
--
------------------------------------------------------------------------------
--  Update information:
--
--  1997.04.27 (Jacob Sparre Andersen)
--    Written based on the Borland Pascal unit Fractal_Images.
--
--  1998.04.05 (Jacob Sparre Andersen)
--    Renamed procedure Init_Gauss to Reset.
--    Added function Even.
--
--  (Insert additional update information above this line.)
------------------------------------------------------------------------------

with Ada.Numerics.Elementary_Functions;
with Ada.Numerics.Float_Random;

package body Random_Numbers is

   ---------------------------------------------------------------------------
   --  Constants:

   Nrand : constant Natural := 4;
   Arand : constant Float := 1.0;

   GaussAdd : constant Float :=
                Ada.Numerics.Elementary_Functions.Sqrt (Float (3 * Nrand));
   GaussFac : constant Float := 2.0 * GaussAdd / (Float (Nrand) * Arand);

   ---------------------------------------------------------------------------
   --  Random number generator:

   Even_Distribution  : Ada.Numerics.Float_Random.Generator;

   ---------------------------------------------------------------------------
   --  procedure Reset:

   procedure Reset is

      use Ada.Numerics.Float_Random;

   begin --  Reset
      Reset (Even_Distribution);
   end Reset;

   ---------------------------------------------------------------------------
   --  function Even:

   function Even return Float is

      use Ada.Numerics.Float_Random;

   begin --  Even
      return Random (Even_Distribution);
   end Even;

   ---------------------------------------------------------------------------
   --  function Gauss:

   function Gauss return Float is

      use Ada.Numerics.Float_Random;

      Sum : Float := 0.0;

   begin --  Gauss
      for i in 1 .. Nrand loop
         Sum := Sum + Random (Even_Distribution);
      end loop;

      return GaussFac * Sum - GaussAdd;
   end Gauss;

   --------------------------------------------------------------------------- 

end Random_Numbers;