From: Brian Drummond <brian_drummond@btconnect.com>
Subject: Re: Random number generation
Date: Thu, 30 Dec 2010 11:51:16 +0000
Date: 2010-12-30T11:51:16+00:00 [thread overview]
Message-ID: <u9roh6912bvhj2be5q1nu7der97qtmj69q@4ax.com> (raw)
In-Reply-To: 864o9vbkwz.fsf@gareth.avalon.lan
On Thu, 30 Dec 2010 11:43:40 +0100, Mart van de Wege <mvdwege@mail.com> wrote:
>Beginner's question: I'm trying to implement a function that rolls a
>number of dice and then adds a modifier. Somehow, it produces the same
>number every time. I can't see where I'm going wrong.
>
>Here's the proof of concept code:
>
>with Ada.Numerics.Discrete_Random,Ada.Integer_Text_IO;
>use Ada.Integer_Text_IO;
>
>procedure Rolltest is
> function Roll ( Number : in Positive;
...
> package Die is new Ada.Numerics.Discrete_Random( Die_Size );
...
> begin
> Die.Reset(G);
...
> end Roll;
>begin
> for I in 1..10 loop
> Put(Roll( Number => 3, Size => 6 ));
> end loop;
>end Rolltest;
>
>Anyone care to at least point me to some documentation that explains
>what I'm doing wrong?
Check the documentation for Ada.Numerics.Discrete_Random or at least its
specification ( .ads file) but I think you'll find you need to reset the Die
exactly once, rather than every call of the Roll function.
As I understand, you are resetting the seed each time, so you get the same
results!
The shortest way to resolve this is to make Die a global variable and reset it
at the start of the main program - in the context of a one-page beginner's
program it's a reasonable thing to do.
We're all taught "Global Variables are BAD" with good reason, so - once you have
resolved the immediate problem - it might be a good time to learn a bit about
packages, to hide the Die and expose only what you need to operate on it.
Essentially, within the package, Die can safely become a "global" variable, but
invisible and inaccessible outside the package, so that it appears more like a
static variable in a C function (holds the current random seed value between
calls).
- Brian
next prev parent reply other threads:[~2010-12-30 11:51 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 [this message]
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
-- 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-12 0:00 ` Keith Thompson
1996-10-12 0:00 ` Geert Bosch
1996-10-10 0:00 Dr J Parker
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 ` 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
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox