comp.lang.ada
 help / color / mirror / Atom feed
From: "Peter C. Chapin" <chapinp@acm.org>
Subject: Question about ordinary fixed point types.
Date: Sun, 15 Aug 2010 17:43:43 -0400
Date: 2010-08-15T17:43:43-04:00	[thread overview]
Message-ID: <4c685fac$0$2373$4d3efbfe@news.sover.net> (raw)

I have a need to work with ordinary fixed point types. I've read the in
the reference manual about them (section 3.5.9, for example), and some
other things. I still have a few questions. I thought I'd start with one
here.

Consider this example:


type Angle_Type is delta 0.0005 range -3.1416 .. 3.1416;
Angle : Angle_Type;
...
Angle := Angle_Type'First;
while Angle < Angle_Type'Last loop
  -- Work with Angle here.
  Angle := Angle + Angle_Type'Small;
end loop;


Aside from Angle_Type'Last does the loop above reliably visit every
possible value of Angle_Type? By "reliably" I mean "has the desired
effect on all possible correct Ada implementations." I guess my question
is: does Angle + Angle_Type'Small always advance Angle to the next
machine number in the type?

I'm using GNAT GPL 2010 and in the example above GNAT appears to be
using 2**(-11) for Angle_Type'Small. It thus uses something over 12,000
values for the type. The code above is for a test program; it is my
intention to exercise every possible value.

As an aside it appears as if Angle_Type'First is actually slightly less
than the -3.1416 mentioned in the type definition. My reading of the Ada
standard is that this is okay. Specifically I should be getting a
multiple of Angle_Type'Small that is closest to the mathematical value
of -3.1416. Apparently the closest multiple is just "to the left" of the
number I specified. This actually works out to be slightly awkward in my
case, but that's a problem I can probably figure out.

Thanks!

Peter



             reply	other threads:[~2010-08-15 21:43 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-15 21:43 Peter C. Chapin [this message]
2010-08-15 21:55 ` Question about ordinary fixed point types Shark8
2010-08-16  0:46   ` Peter C. Chapin
2010-08-16  4:13     ` Jeffrey Carter
2010-08-16  8:57       ` Simon Wright
2010-08-15 22:08 ` Yannick Duchêne (Hibou57)
2010-08-16  1:03   ` Peter C. Chapin
2010-08-16  4:11     ` Jeffrey Carter
2010-08-16 10:03       ` Ludovic Brenta
2010-08-17 14:35         ` sjw
2010-08-17 15:51           ` Ludovic Brenta
2010-08-16 11:31       ` Peter C. Chapin
2010-08-16  9:23     ` Simon Wright
2010-08-16 15:47       ` Simon Wright
2010-08-17 14:37       ` sjw
2010-08-16 11:02 ` Stephen Leake
2010-08-16 11:29   ` Peter C. Chapin
2010-08-16 12:53     ` Dmitry A. Kazakov
2010-08-16 20:28       ` Peter C. Chapin
2010-08-16 20:58         ` Adam Beneschan
2010-08-16 13:01     ` Dmitry A. Kazakov
2010-08-16 14:28     ` Robert A Duff
2010-08-16 20:31       ` Peter C. Chapin
2010-08-16 23:01         ` Robert A Duff
2010-08-16 23:17           ` Peter C. Chapin
2010-08-17  0:56             ` Robert A Duff
2010-08-17  2:03     ` Stephen Leake
2010-08-20  1:21 ` Yannick Duchêne (Hibou57)
replies disabled

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