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
next prev 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