comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Random number generation
Date: Thu, 30 Dec 2010 14:04:05 +0100
Date: 2010-12-30T14:04:03+01:00	[thread overview]
Message-ID: <ztxwdep27jin.1qme1x6mz4psa.dlg@40tude.net> (raw)
In-Reply-To: 864o9vbkwz.fsf@gareth.avalon.lan

On Thu, 30 Dec 2010 11:43:40 +0100, Mart van de Wege wrote:

> Anyone care to at least point me to some documentation that explains
> what I'm doing wrong? 

Random generator is a stateful object, thus it cannot be local.

I suggest this is what you want:
--------------------------------------------------------------------------
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;

with Ada.Numerics.Discrete_Random;

procedure Rolltest is
   package Uniform is new Ada.Numerics.Discrete_Random (Natural);
   use Uniform;

   function Roll
            (  Dice     : Generator;
               Number   : in Positive;
		   Size     : in Positive;
		   Modifier : in Integer := 0
            )  return Integer is 
      Result : Integer := 0;
   begin
      for I in 1..Number loop
	   Result := Result + Random (Dice) mod Size;
      end loop;
      Result := Result + Modifier + Number;
      return Result;
   end Roll;

   Dice : Generator;
begin
   Reset (Dice);
   for I in 1..10 loop
      Put (Roll (Dice => Dice, Number => 3, Size => 6));
   end loop;
end Rolltest;
-------------------------------------------------------------------------
I added Number to the accumulated result because you did so in your example
by choosing the range 2..Size.

BTW, a sum of n realizations of a uniformly distributed random number is
distributed uniformly with the factor n. So you need not to run a cycle
within Roll:

   function Roll
            (  Dice     : Generator;
               Number   : in Positive;
		   Size     : in Positive;
		   Modifier : in Integer := 0
            )  return Integer is 
   begin
      return Number * ((Random (Dice) mod Size) + 1) + Modifier;
   end Roll;
 
-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  parent reply	other threads:[~2010-12-30 13:04 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-30 10:43 Random number generation 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 [this message]
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
  -- strict thread matches above, loose matches on Subject: below --
2010-07-13 12:45 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
2003-09-26  7:14 random " christoph.grein
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
1997-12-19  0:00 Mok-kong Shen
1998-01-02  0:00 ` Mok-kong Shen
1998-01-02  0:00   ` Robert Dewar
1996-10-13  0:00 Random Number Generation parker
1996-10-13  0:00 ` Robert Dewar
1996-10-14  0:00 ` Robert A Duff
1996-10-10  0:00  Dr J Parker
1996-10-10  0:00  Dr J Parker
1996-10-12  0:00 ` Geert Bosch
1996-10-12  0:00 ` Keith Thompson
1996-10-02  0:00  Dr J Parker
1996-10-03  0:00 ` Mats Weber
1996-10-07  0:00 ` Geert Bosch
1996-09-23  0:00 Nigel J. Tracey
1996-09-23  0:00 ` Tucker Taft
1996-10-02  0:00   ` Robert I. Eachus
1996-10-02  0:00   ` Nigel J. Tracey
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
replies disabled

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