comp.lang.ada
 help / color / mirror / Atom feed
From: "Vinzent Hoefler" <nntp-2010-09@t-domaingrabbing.de>
Subject: Fixed point constants issue
Date: Mon, 13 Sep 2010 19:27:30 +0200
Date: 2010-09-13T19:27:30+02:00	[thread overview]
Message-ID: <op.vizer4qnd20q5n@jellix.jlfencey.com> (raw)

Is this a GNAT bug or am I just stupid?

Suppose we have a fixed point type (with a rather large delta):

-- 8< --
with Ada.Text_IO; use Ada.Text_IO;

procedure Fixed_Point
is
    FEET_PER_METER : constant := 0.3048;
    HEIGHT         : constant := 10; -- Feet

    type Altitude is delta (2.0**15 / 50_000.0) range 0.0 .. 50_000.0;

    TEN_FEET_1 : constant          := HEIGHT * FEET_PER_METER;
    TEN_FEET_2 : constant Altitude := HEIGHT * FEET_PER_METER;
    TEN_FEET_3 : constant Altitude := TEN_FEET_1;
    TEN_FEET_4 : constant Altitude := Altitude (HEIGHT * FEET_PER_METER);
begin
    Put_Line ("10 feet ~" & Altitude'Image (TEN_FEET_1) & " m.");
    Put_Line ("10 feet ~" & Altitude'Image (TEN_FEET_2) & " m.");
    Put_Line ("10 feet ~" & Altitude'Image (TEN_FEET_3) & " m.");
    Put_Line ("10 feet ~" & Altitude'Image (TEN_FEET_4) & " m.");
end Fixed_Point;
-- 8< --

Now let's run the test:

10 feet ~ 3.0 m.
10 feet ~ 0.0 m.    <--- *oops*!?
10 feet ~ 3.0 m.
10 feet ~ 3.0 m.

I can see what's going on in case of TEN_FEET_2 ("FEET_PER_METER" equals
zero after the obviously happening type conversion to Altitude), but I
sure wouldn't expect such a behavior from an Ada compiler, especially not
when TEN_FEET_4 gives the expected result again[1].

To add to the confusion, the target compiler actually even does it the
"right" (or rather: expected) way; but after reading all the relevant
paragraphs in the ARM again and again, I still do not know if GNAT does
it wrong here, or if we just entered one of the few dark corners in the
Ada language.

Can anyone shed some light on this? This has driven us crazy for weeks now.


Vinzent.

[1] Of course, "Altitude'(HEIGHT * FEET_PER_METER)" yields "0.0" again.
     At least this is consistent with my understanding so far.

-- 
There is no signature.



             reply	other threads:[~2010-09-13 17:27 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-13 17:27 Vinzent Hoefler [this message]
2010-09-13 18:04 ` Fixed point constants issue 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
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