comp.lang.ada
 help / color / mirror / Atom feed
From: Mars Gralia <gralimj1@aplcore.jhuapl.edu>
Subject: Building on Random_Float?
Date: Thu, 09 May 2002 16:29:07 -0400 (EDT)
Date: 2002-05-09T16:29:07-04:00	[thread overview]
Message-ID: <mailman.1020976203.6044.comp.lang.ada@ada.eu.org> (raw)

Ada Wizards and Gentle Folk,

I would like a high-level Ada95 design that allows me to build a
layered series of random number generators which ultimately use
Ada.Numerics.Float_Random.  Could you please provide me one?

Details are given below.

Thank you,
Mars Gralia, D.Sc.
The Johns Hopkins University
Applied Physics Laboratory
gralia@jhuapl.edu
443.778.5509 (USA)


Appendix A: Software Specification
Appendix B: Specification Amplification
Appendix C: Background
Appendix D: Desired Specification Files



----------------- Appendix A: Software Specification

10) The goal is a "package Interest_Rate_Pkg", which produces random
    numbers from a gamma distribution.
20) The "package specification", file Interest_Rate_Pkg.ads, differs
    form Ada.Numerics.Float_Random only
    a) in the package name and
    b) the data type Uniformly_Distributed
      b1)  declaration is eliminated
      b2)  is converted to "Float" for the "function Random".
30) The package is built in the following layers:
        package Interest_Rate_Pkg, which "withs"
          package General_Gamma_Pkg, which "withs"
            package Standard_Gamma_Pkg, which "withs"
              package Exponential_Pkg, which "withs"
                package Ada.Numerics.Float_Random;
              package Normal_Pkg, which "withs"
                package Ada.Numerics.Float_Random;
              package Ada.Numerics.Float_Random.
40) I am not requesting the algorithms, for I have all of them.  Indeed,
    they run with the uniform generator the author supplies.  But I
    prefer the Ada95 generator as the basis.





----------------- Appendix B: Specification Details

10) This note more carefully defines the family of generators I
    would like to use.  It's code skelton is:

    package Interest_Rate_Pkg is ... end Interest_Rate_Pkg;
    with General_Gamma_Pkg; package body Interest_Rate_Pkg is
      ...  end Interest_Rate_Pkg;

    package General_Gamma_Pkg is ... end General_Gamma_Pkg;
    with Standard_Gamma_Pkg; package body General_Gamma_Pkg is
      ... end General_Gamma_Pkg;

    package Standard_Gamma_Pkg is ... end Standard_Gamma_Pkg;
    with Normal_Pkg, Exponential_Pkg, Ada.Numerics.Float_Random;
    package body Standard_Gamma_Pkg is ... end Standard_Gamma_Pkg;

    package Exponential_Pkg is ... end Exponential_Pkg;
    with Ada.Numerics.Float_Random;  package body Exponential_Pkg is
      ... end Exponential_Pkg;

    package Normal_Pkg is ... end Normal_Pkg;
    with Ada.Numerics.Float_Random;  package body Normal_Pkg is
      ... end Normal_Pkg;

20) I would prefer the technology allow me to continue the
    layering even deeper than the four levels I need in this example.



----------------- Appendix C: Background

I'm working under Gnat 3.13p, but would like to use only standard
Ada.

I've tried, and failed:
a) To simply build the second layer on Ada.Numerics.Float_Random.
   As expected, this failed because Float_Random is a "limited private",
   so I can't use an assignment statement to store it in
   Normal_Pkg.Generator.
b) To make a package Ada.Numerics.Float_Random.Normal.  The
   specific message was:
   --> ada.numerics.float_random.random_brown_pkg.ads:1:01:
   --> current unit cannot depend on "Float_Random" (wrong
   --> categorization)
c) To use pointers as did Mr. Eachus in his ADAR_Random_Number.
   Hint: I got it from the Google archives.  It had the header:
   --> From: Robert I. Eachus (eachus@spectre.mitre.org)
   --> Subject: Re: Random number generators
   --> Newsgroups: comp.lang.ada
   --> Date: 1995/07/25

I feel I'm a journeyman programmer, certainly not a formal
student.  (But aren't we all still learning?)

The source of my current algorithm for all the layers are found in
http://odin.mdacc.tmc.edu/anonftp/page_2.html#RANDLIB They were
developed by Barry W. Brown, James Lovato, Kathy Russell and John
Venier.  On the web, it was called "randlib".  Internally, it is labeled
"RANDLIB; Library of Fortran Routines for Random Number Generation;
Version 1.3 -- August, 1997".  The authors are with the
> Department of Biomathematics, Box 237;
> The University of Texas, M.D. Anderson Cancer Center;
> 1515 Holcombe Boulevard;
> Houston, TX      77030
They also tell us "This work was supported by grant CA-16672 from the
National Cancer Institute."



----------------- Appendix D: Desired Specification Files

This section gives the package specs I'd like to have in the end.
Note they are virtually identical.

  package Interest_Rate_Pkg is
    type Generator is limited private;
    function Random (Gen: Generator) return Float;
    procedure Reset (Gen: in Generator; Initiator: in Integer);
    procedure Reset (Gen: in Generator);
    type State is private;
    procedure Save (Gen: in Generator; To_State: out State);
    procedure Reset (Gen: in Generator; From_State: in State);
    Max_Image_Width: constant := implementation-defined integer value;
    function Image (Of_State: State) return String;
    function Value (Coded_State: String) return State;
  private
    ... -- not specified by Gralia
  end Interest_Rate_Pkg;

  package General_Gamma_Pkg is
    type Generator is limited private;
    function Random (Gen: Generator) return Float;
    procedure Reset (Gen: in Generator; Initiator: in Integer);
    procedure Reset (Gen: in Generator);
    type State is private;
    procedure Save (Gen: in Generator; To_State: out State);
    procedure Reset (Gen: in Generator; From_State: in State);
    Max_Image_Width: constant := implementation-defined integer value;
    function Image (Of_State: State) return String;
    function Value (Coded_State: String) return State;
  private
    ... -- not specified by Gralia
  end General_Gamma_Pkg;

  package Standard_Gamma_Pkg is
    type Generator is limited private;
    function Random (Gen: Generator) return Float;
    procedure Reset (Gen: in Generator; Initiator: in Integer);
    procedure Reset (Gen: in Generator);
    type State is private;
    procedure Save (Gen: in Generator; To_State: out State);
    procedure Reset (Gen: in Generator; From_State: in State);
    Max_Image_Width: constant := implementation-defined integer value;
    function Image (Of_State: State) return String;
    function Value (Coded_State: String) return State;
  private
    ... -- not specified by Gralia
  end Standard_Gamma_Pkg;

  package Exponential_Pkg is
    type Generator is limited private;
    function Random (Gen: Generator) return Float;
    procedure Reset (Gen: in Generator; Initiator: in Integer);
    procedure Reset (Gen: in Generator);
    type State is private;
    procedure Save (Gen: in Generator; To_State: out State);
    procedure Reset (Gen: in Generator; From_State: in State);
    Max_Image_Width: constant := implementation-defined integer value;
    function Image (Of_State: State) return String;
    function Value (Coded_State: String) return State;
  private
    ... -- not specified by Gralia
  end Exponential_Pkg;

  package Normal_Pkg is
    type Generator is limited private;
    function Random (Gen: Generator) return Float;
    procedure Reset (Gen: in Generator; Initiator: in Integer);
    procedure Reset (Gen: in Generator);
    type State is private;
    procedure Save (Gen: in Generator; To_State: out State);
    procedure Reset (Gen: in Generator; From_State: in State);
    Max_Image_Width: constant := implementation-defined integer value;
    function Image (Of_State: State) return String;
    function Value (Coded_State: String) return State;
  private
    ... -- not specified by Gralia
  end Normal_Pkg;


(end of note)



             reply	other threads:[~2002-05-09 20:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-05-09 20:29 Mars Gralia [this message]
2002-05-26 23:24 ` Building on Random_Float? Robert I. Eachus
  -- strict thread matches above, loose matches on Subject: below --
2002-05-10 19:36 Building on Random Float? Mike Brenner
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox