comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Cc: njt@minster.york.ac.uk
Subject: Re: Random Number Generation
Date: 1996/09/23
Date: 1996-09-23T00:00:00+00:00	[thread overview]
Message-ID: <Dy7CMw.A7v.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 5266q1$a0t@netty.york.ac.uk


Nigel J. Tracey (njt@minster.york.ac.uk) wrote:

: Can anyone point me in the direction of a routines to do
: random number generation. The requirements are as follows.

: 	A routine which will generate a integer between a given
: 		minimum and maximum value. Up to Integer'First and Integer'Last

: 	A routine which will do the same for floats i.e. a random
: 		value from Float'First to Float'Last but between two
: 		given values.

: The values of the min and max value for the above routines
: are not known at compile time, hence why I don't thing
: I can use Ada.Numerics.Discrete_Random

Discrete_Random does not require compile-time-known values.
However, it does require that the values be known at the time
of the instantiation.  Hence, the following is legal:

    subtype Random_Range is Integer range F(x) .. G(y);
    package Dyn_Random is new Ada.Numerics.Discrete_Random(Random_Range);

However, it may be want to change the range after the instantiation
takes place, or the instantiation needs to be at the library level,
and you won't know these values until you are inside the main
subprogram.

In any case, Ada.Numerics.Float_Random is the easiest one to adapt to your
use, since it always generates values between 0.0 and 1.0.  You
can then multiply that value by an appropriate integer or float
and add the low bound to produce the desired dynamic range.
Some care may be needed when converting from float back to integer,
to provide the desired distribution, if you want the end points to
be just as likely as any other value.  Conversion from
float to integer rounds, so you may want to use the following
trick (using "mod") to get the desired range, with no spillover to 
High_Bound+1 (this trick originates with Robert Eachus, I believe):

  declare
    Result : Integer range Low_Bound .. High_Bound;
    Range_Length : constant Integer := High_Bound - Low_Bound + 1;
  begin
    Result := (Integer(Float(Range_Length) * 
      Ada.Numerics.Float_Random.Random(Gen)) mod Range_Length) + Low_Bound;
    ...

: Any help would be very much appreciated (please also e-mail
: a copy of relies as the news feed is a little unreliable here)

: Thanks a lot,

: 	Nigel

: --------------------
: Nigel J. Tracey MEng, Research Associate (High Integrity Systems Group).
: Department of Computer Science,   Office: X/D016
: University of York,               Tel   : [0|+44]1904 432769
: York, England.                    E-Mail: njt@minster.york.ac.uk
: YO1 5DD.                          URL   : http://sv1pc161.cs.york.ac.uk/~njt

-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Cambridge, MA  USA




  reply	other threads:[~1996-09-23  0:00 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-09-23  0:00 Random Number Generation Nigel J. Tracey
1996-09-23  0:00 ` Tucker Taft [this message]
1996-10-02  0:00   ` Nigel J. Tracey
1996-10-02  0:00   ` Robert I. Eachus
1996-10-03  0:00   ` Nigel J. Tracey
1996-09-25  0:00 ` James_Rogers
1996-09-26  0:00   ` Dale Stanbrough
1996-10-01  0:00   ` Robert I. Eachus
1996-09-30  0:00 `  Dr J Parker
1996-10-01  0:00   ` Tucker Taft
1996-10-01  0:00     ` Keith Thompson
  -- strict thread matches above, loose matches on Subject: below --
1996-10-02  0:00  Dr J Parker
1996-10-03  0:00 ` Mats Weber
1996-10-07  0:00 ` Geert Bosch
1996-10-10  0:00  Dr J Parker
1996-10-12  0:00 ` Geert Bosch
1996-10-12  0:00 ` Keith Thompson
1996-10-10  0:00  Dr J Parker
1996-10-13  0:00 parker
1996-10-13  0:00 ` Robert Dewar
1996-10-14  0:00 ` Robert A Duff
1997-12-19  0:00 random number generation Mok-kong Shen
1998-01-02  0:00 ` Mok-kong Shen
1998-01-02  0:00   ` Robert Dewar
2003-09-26  7:00 Andrew
2003-09-26  7:35 ` tmoran
2003-09-26 17:58   ` Andrew
2003-09-26 19:25   ` Andrew
2003-09-26 19:35     ` chris
2003-09-26 21:44     ` tmoran
2003-09-27  1:40     ` Robert I. Eachus
2003-09-27  4:48       ` Andrew
2003-09-26  7:14 christoph.grein
2010-07-13 12:45 Random " tonyg
2010-07-13 12:50 ` Jacob Sparre Andersen
2010-07-13 12:58 ` Dmitry A. Kazakov
2010-07-13 13:17 ` Thomas Løcke
2010-07-13 16:07 ` Jeffrey R. Carter
2010-07-13 20:33   ` John B. Matthews
2010-07-13 23:02     ` Jeffrey R. Carter
2010-07-14  4:42       ` John B. Matthews
2010-07-15 19:01         ` tonyg
2010-12-30 10:43 Mart van de Wege
2010-12-30 10:54 ` Thomas Løcke
2010-12-30 12:11   ` Mart van de Wege
2010-12-30 11:34 ` Niklas Holsti
2010-12-30 11:53   ` Georg Bauhaus
2010-12-30 12:25     ` Mart van de Wege
2010-12-30 15:29       ` Georg Bauhaus
2010-12-30 15:37         ` Mart van de Wege
2010-12-30 11:51 ` Brian Drummond
2010-12-30 12:16   ` Mart van de Wege
2010-12-30 13:04 ` Dmitry A. Kazakov
2010-12-30 13:22   ` Niklas Holsti
2010-12-30 13:39     ` Dmitry A. Kazakov
2010-12-30 13:30   ` Mart van de Wege
2010-12-31  3:14 ` Gene
replies disabled

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