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
next 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