comp.lang.ada
 help / color / mirror / Atom feed
From: "Vinzent Hoefler" <nntp-2010-09@t-domaingrabbing.de>
Subject: Re: Fixed point constants issue
Date: Tue, 14 Sep 2010 19:42:52 +0200
Date: 2010-09-14T19:42:52+02:00	[thread overview]
Message-ID: <op.vi095qh0d20q5n@jellix.jlfencey.com> (raw)
In-Reply-To: 1ak1k4eh1p96t$.essf9fu1cx4z$.dlg@40tude.net

On Tue, 14 Sep 2010 09:47:03 +0200, Dmitry A. Kazakov
<mailbox@dmitry-kazakov.de> wrote:

> Well, I don't disagree, but the part of the problem is a non-intended  
> use.

Well, the actually intended use was to create a range constrained subtype
 from an existing full-range fixed point type:

-- 8< -- snip --
    type BASE_TYPE is delta 1.0 / 64.0 range 0.0 .. 1.0;
    for BASE_TYPE'Small use 1.0 / 128.0;

    UPPER_BOUND_1 : constant           := 51.0 * 0.01;
    UPPER_BOUND_2 : constant BASE_TYPE := 51.0 * 0.01;
    UPPER_BOUND_3 : constant BASE_TYPE := BASE_TYPE (51.0 * 0.01);

    subtype SUB1_TYPE is BASE_TYPE range 0.0 .. UPPER_BOUND_1;
    subtype SUB2_TYPE is BASE_TYPE range 0.0 .. UPPER_BOUND_2;
    subtype SUB3_TYPE is BASE_TYPE range 0.0 .. UPPER_BOUND_3;
-- 8< -- snip --

(Further details of the test procedure omitted to save space.)

The numbers are arbitrarily chosen and in the real code we weren't using
constants, but rather the raw expression like in
"range 0.0 .. SOME_CONSTANT * SOME_OTHER_CONSTANT" (but that doesn't  
actually
matter, the issue remains the same, if not to say totally consistent).

Now, interestingly, the resulting ranges of the subtypes seem to be
compiler-dependent:

-- 8< -- snip --
~/project/fixed_point_issue> build fixed_point.bld
Registering Ada Sources
Compiling /home/hoefler/project/fixed_point_issue/fixed_point.adb
because "fixed_point.o" doesn't exist
Linking fixed_point
Translating symbols for fixed_point
Done
~/project/fixed_point_issue> simppc -ada fixed_point
BASE_TYPE:  0.00000000000000 ..  1.00000000000000
SUB1_TYPE:  0.00000000000000 ..  0.50781250000000
SUB2_TYPE:  0.00000000000000 ..  0.50781250000000
SUB3_TYPE:  0.00000000000000 ..  0.50781250000000
~/project/fixed_point_issue> gnatmake -f fixed_point
gnatgcc -c fixed_point.adb
gnatbind -x fixed_point.ali
gnatlink fixed_point.ali
~/project/fixed_point_issue> ./fixed_point
BASE_TYPE:  0.00000000000000 ..  0.99218750000000
SUB1_TYPE:  0.00000000000000 ..  0.50781250000000
SUB2_TYPE:  0.00000000000000 ..  0.39843750000000
SUB3_TYPE:  0.00000000000000 ..  0.50781250000000
-- 8< --

After all it really looks like the target compiler actually uses an Ada83
mode(l) here, although the code definitely is Ada95, and also both  
compilers
claim to be Ada95 compilers.

> It is difficult to say how the compiler could detect that.

Well, it did. By raising Constraint_Error for an assignment of a value  
within
the supposed range of the subtype. The virtues of unit testing.  
Fortunately,
it wasn't the other way around.


Vinzent.

-- 
There is no signature.



  reply	other threads:[~2010-09-14 17:42 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-13 17:27 Fixed point constants issue Vinzent Hoefler
2010-09-13 18:04 ` Dmitry A. Kazakov
2010-09-13 18:25   ` Vinzent Hoefler
2010-09-13 19:05     ` Niklas Holsti
2010-09-13 20:35       ` Vinzent Hoefler
2010-09-13 20:35       ` Jeffrey Carter
2010-09-13 21:06         ` Vinzent Hoefler
2010-09-14  5:39         ` Niklas Holsti
2010-09-24 14:43         ` Markus Schöpflin
2010-09-24 20:05           ` Vinzent Hoefler
2010-09-24 21:38           ` Jeffrey Carter
2010-09-24 22:42             ` Vinzent Hoefler
2010-09-25  0:16               ` Jeffrey Carter
2010-09-27 10:33                 ` Markus Schöpflin
2010-09-27 18:57                   ` Jeffrey Carter
2010-09-28  8:16                     ` Markus Schöpflin
2010-09-28 17:28                       ` Jeffrey Carter
2010-10-05  6:27                         ` Randy Brukardt
2010-10-05 18:40                           ` Jeffrey Carter
2010-09-27 17:58             ` Adam Beneschan
2010-09-13 20:32     ` Dmitry A. Kazakov
2010-09-13 21:08       ` Vinzent Hoefler
2010-09-14  6:54         ` J-P. Rosen
2010-09-14 18:28           ` Vinzent Hoefler
2010-09-14  7:47         ` Dmitry A. Kazakov
2010-09-14 17:42           ` Vinzent Hoefler [this message]
2010-09-15  8:35             ` Dmitry A. Kazakov
2010-09-15 17:24               ` Vinzent Hoefler
2010-09-15 20:11                 ` Dmitry A. Kazakov
2010-09-14 19:44   ` 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