From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,2ac1e7c090dd0c4a X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!postnews.google.com!d4g2000prg.googlegroups.com!not-for-mail From: DarthBob88 Newsgroups: comp.lang.ada Subject: Re: "Constraint Error: Range Check" That Does Not Always Occur Date: Thu, 22 Nov 2007 19:48:21 -0800 (PST) Organization: http://groups.google.com Message-ID: <211e539c-81a8-4598-9acd-33907d03ad96@d4g2000prg.googlegroups.com> References: <86ddf1f4-c7be-4729-8480-bae618b6d296@a39g2000pre.googlegroups.com> NNTP-Posting-Host: 66.228.25.76 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1195789701 15299 127.0.0.1 (23 Nov 2007 03:48:21 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 23 Nov 2007 03:48:21 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: d4g2000prg.googlegroups.com; posting-host=66.228.25.76; posting-account=Wx82cgoAAACNa4nrJhRV8xCn3wMN2wR_ User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9,gzip(gfe),gzip(gfe) Content-Disposition: inline Xref: g2news1.google.com comp.lang.ada:18578 Date: 2007-11-22T19:48:21-08:00 List-Id: On Nov 22, 6:14 am, Matthew Heaney wrote: > DarthBob88 writes: > > 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. > > That's fine. > > > subtype Dice is Integer range 3*Die'First .. 3*Die'Last; > > --Declares that Dice may be anything from 3 to 18. > > But you sum 4 dice; that's a min of 4 * 1 and a max of 4 * 6 -- why did you > make your Dice subtype too small? That would because I cut'n'pasted it from a program to simulate rolling two dice. As for the 3 and 4 discrepancy, that's just stupidity on my part. I was trying to simulate the sum of three dice, chosen from four that were rolled. Hence, that little idiocy. *facepalm* > > package Random_Die is new Ada.Numerics.Discrete_Random (Die); > > use Random_Die; > > --Random generator; produces an integer between 1 and 6 > > Right. > > > sum : Integer := 0; > > G: Generator; > > D1 : Dice; > > D2 : Dice; > > D3 : Dice; > > D4 : Dice; > > --Declare four Dice > > --or: D1, D2, D3, D4 : Die; -- DICE IS THE WRONG SUBTYPE > -- Sum : Dice; -- subtype should be 4 .. 24 > > > begin > > Reset(G); > > D1 := Random(G); > > D2 := Random(G); > > D3 := Random(G); > > D4 := Random(G); > > --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] > > The generator will return you a random number between 1 and 6 (inclusive). > > Your Die subtype has a minimum bounds of 1, so the random number can (and will) > return values that include the values 1 and 2. > > Your Dice subtype (to which you assign the value returned by the generator) has > a minimum bound of 3. So when the random number generator returns a value less > then 3, you get C_E during the assignment. > > Just change the declarations of Dx to use subtype Die instead of Dice, and then > all is well. Thank you kindly, sir. Ladies and gentlemen, this is why you should not code at 0-dark-30, because you make idiotic mistakes like this, instead of thinking through them. > > 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 .adb > > > If it helps any, I'm using the Windows version of GNAT on XP. Thanks > > in advance.