From: Damien Carbonne <damien.carbonne@free.fr>
To: DarthBob88 <darthbob88@gmail.com>
Subject: Re: "Constraint Error: Range Check" That Does Not Always Occur
Date: Thu, 22 Nov 2007 08:38:37 +0100
Date: 2007-11-22T08:38:38+01:00 [thread overview]
Message-ID: <474531FD.5090401@free.fr> (raw)
In-Reply-To: <86ddf1f4-c7be-4729-8480-bae618b6d296@a39g2000pre.googlegroups.com>
DarthBob88 a �crit :
> I've been trying to write a program that creates four random numbers,
> to simulate four dice rolling; a D&D simulator, in fact.
> Unfortunately, I occasionally get "raised CONSTRAINT_ERROR : test.adb:
> 22 range check failed" (line 22 is one of the lines to generate a
> random number; it varies between the four). I have been trying to find
> information on how to prevent this error, but I can't find anything
> about it. I'm extremely new to this language, as in I only started
> last week new, so any help would be greatly appreciated. Here follows
> my code, warts and all.
>
> with Ada.Text_IO, Ada.Integer_Text_IO;
> with Ada.Numerics.Discrete_Random;
>
> procedure test is
> subtype Die is Integer range 1..6;
> --Declare that anything of type Die may be
> --an integer, value between 1 and 6, inclusive, and sod-all else.
> subtype Dice is Integer range 3*Die'First .. 3*Die'Last;
> --Declares that Dice may be anything from 3 to 18.
> package Random_Die is new Ada.Numerics.Discrete_Random (Die);
Here you instantiate Discrete_Random with Die.
Change Die to Dice, it should work.
> use Random_Die;
> --Random generator; produces an integer between 1 and 6
> sum : Integer := 0;
> G: Generator;
> D1 : Dice;
> D2 : Dice;
> D3 : Dice;
> D4 : Dice;
> --Declare four Dice
> begin
> Reset(G);
> D1 := Random(G);
> D2 := Random(G);
> D3 := Random(G);
> D4 := Random(G);
Here, Random should have been instantiated with Dice.
> --I Haven't found the error just yet, but a Constraint_Error
> --Occasionally comes up for the previous 4 lines
> --I haven't been able to find it online, but I presume
> --It's because the generator comes up with a number outside of [1,6]
> sum := D1 + D2 + D3 + D4;
> --Debugging
> Ada.Integer_Text_IO.Put(D1);
> Ada.Integer_Text_IO.Put(D2);
> Ada.Integer_Text_IO.Put(D3);
> Ada.Integer_Text_IO.Put(D4);
> Ada.Integer_Text_IO.Put(sum);
> end test;
> --compile Ada programs with gnat make <foo>.adb
>
> If it helps any, I'm using the Windows version of GNAT on XP. Thanks
> in advance.
next prev parent reply other threads:[~2007-11-22 7:38 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-22 6:42 "Constraint Error: Range Check" That Does Not Always Occur DarthBob88
2007-11-22 7:38 ` Damien Carbonne [this message]
2007-11-22 9:12 ` anon
2007-11-22 9:56 ` Stephen Leake
2007-11-26 18:38 ` Adam Beneschan
2007-11-22 9:47 ` Stuart
2007-11-22 14:14 ` Matthew Heaney
2007-11-23 3:48 ` DarthBob88
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox