comp.lang.ada
 help / color / mirror / Atom feed
* Fixed point constants issue
@ 2010-09-13 17:27 Vinzent Hoefler
  2010-09-13 18:04 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 30+ messages in thread
From: Vinzent Hoefler @ 2010-09-13 17:27 UTC (permalink / 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.



^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2010-10-05 18:40 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox