comp.lang.ada
 help / color / mirror / Atom feed
From: dmarshal@netcom.com (Dave Marshall)
Subject: Re: Random numbers in Gnat
Date: Thu, 2 Mar 1995 08:31:26 GMT
Date: 1995-03-02T08:31:26+00:00	[thread overview]
Message-ID: <dmarshalD4t10E.2uo@netcom.com> (raw)
In-Reply-To: 3j2q9t$s3n@solar.Armstrong.EDU

ab@captblood.armstrong.edu () writes:


>I cannot find any discussion of the use of random() procedure

Please, humor me.  Don't put parentheses in when it's not C.

>in gnat-2.03 Unix version for SunOS 4.1.3. The only information
>that I found is in file a-numran.ads, and as the following
>shows I must have misunderstood the intent and use of the objects
>in that file.

Always consult the LRM for definitive discussion.  Read the Rationale, 
too, for a more narrative-type approach.

>Here is a little test that I've concocted:

>        with text_io; use text_io;
>		with ada.numerics.random; use ada.numerics.random;

I hate "use"s.  Thank God for "use types."  Whoever is getting royalties 
on "renames" is going to become poor very soon.

>		procedure randtest is
>          package int_io is new integer_io(integer); use int_io;

I hate Text_IO.Integer_IO, too.

>		  rand_state: state:= make_state;

>          -- return random number in 0..up_bound
>          function my_random(up_bound: integer) return integer is
>                r: Uniformly_Distributed;
>          begin
>                random( rand_state, r);
>                return integer(r*float(up_bound));
>          end my_random;          
>        begin
>          for i in 1..10 loop
>                put(my_random(1000)); new_line;
>          end loop;
>        end randtest;

This is far too complicated.  By the way, my copy of the latest and 
greatest RM just doesn't mention Ada.Numerics.Random.  I see 
Ada.Numerics.Discrete_Random and Ada.Numerics.Float_Random.

>The program prints out only zeros rather than 10 random numbers in the
>0..1000 range. I dislike the use of the global rand_state variable. 
>However using it as a parameter is no better either. Indeed, why
>should one be bothered with this quantity anyway? (In C one
>just seeds the generator, and then calls the random() as a 
>parameterless function, why not here?)

Because different tasks may want different seeds.

>I'll appreciate your discussion as to how the random number
>generator should be used. Pointers to some documentation/discussion
>of the objects in a-numran.ads would also be helpful.

Here's my program that attempts to do the same thing.

with Text_IO;
with Ada.Numerics.Discrete_Random;

   type Some_Numbers is range 0 .. 1_000;

   package Some_Random is new Ada.Numerics.Discrete_Random(Some_Numbers);

   Some_Generator : Some_Random.Generator;

begin

   Some_Random.Reset(Some_Generator);
   for I in 1 .. 10 loop
      Text_IO.Put(Some_Numbers'Image(Some_Random.Random(Some_Generator)));
   end loop;

end Rand_Test;

>Dr. A.Bykat
>Fuller E. Callaway Professor

-- 
Dave Marshall
dmarshal@netcom.com




  reply	other threads:[~1995-03-02  8:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1995-03-01 21:51 Random numbers in Gnat ab
1995-03-02  8:31 ` Dave Marshall [this message]
1995-03-03 19:11   ` Robert Dewar
1995-03-02 15:50 ` Robert I. Eachus
1995-03-03 15:08 ` Tucker Taft
replies disabled

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