comp.lang.ada
 help / color / mirror / Atom feed
From: "Dr. Joachim Schr�er" <joachim.schroeer@vs.dasa.de>
Subject: Re: Top 10 Language Constructs (Ada)
Date: 2000/07/18
Date: 2000-07-18T00:00:00+00:00	[thread overview]
Message-ID: <8l21od$mkr@newsserv.vs.dasa.de> (raw)
In-Reply-To: 39751555.4E40A4A7@lmco.com


Bill Brennan <william.c.brennan@lmco.com> schrieb in im Newsbeitrag:
39751555.4E40A4A7@lmco.com...
> David Kristola wrote:
>
> > The other day, i came across a message field in an interface document
> > that i was coding against.  The field is 16 bits, with the high order
> > bit being a sign bit, the next highest order bit has the value 2^1,
> > the third highest bit is 2^0, and so on down to the low order bit,
> > which is 2^(-13).  The note said that the field is 2's complement.
> > No problem....
> >
> >    type Plasma_Volts_Type is delta 0.00012207 range -4.0 .. 3.99987793;
> >    for Plasma_Volts_Type'Size use 16;
>
> Actually, this doesn't compile in GNAT, I presume because it rounds
> Plasma_Volts_Type'Last to something which won't fit in 16 bits.
>
> Besides the fact that this type definition isn't portable (for GNAT
> anyway),
> it doesn't really reflect what you're trying to say.  Without your
> description,
> I would have no idea that 0.00012207 ~= 2^(-13) or that
> 3.99987793 ~= 4 - 2^(-13).
>
> Personally, I think it's clearer to state it as
>
>    type Plasma_Volts_Type is
>       delta  2#000.0_0000_0000_0001#     --  approx 0.00012207
>       range -2#100.0_0000_0000_0000# ..  --        -4
>              2#011.1_1111_1111_1111#;    --  approx 3.99987793
>
>    for Plasma_Volts_Type'Size use 16;
>
> which will compile, and more accurately expresses what is intended.
>
> This ability to express literals fairly transparently using any
> numerical
> base of convenience is yet another reason to value Ada.  (though I'm not
> sure it's important enough to go on my top 10 list.)
>
> -- Bill Brennan

What about this version:

type Plasma_Volts_Type is delta 2.0**(-13) range -4.0 .. 4.0 - 2.0**(-13);
for Plasma_Volts_Type'Size use 16;

And if the required range and the 'delta allow 'delta < 'small you have to
write a rep-clause for 'small like:

for Plasma_Volts_Type'Small use 2.0**(-13);

Joachim Schroeer









  reply	other threads:[~2000-07-18  0:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-07-14  0:00 Top 10 Language Constructs (Ada) Bruno Gustavs
2000-07-14  0:00 ` Samuel T. Harris
2000-07-15  0:00   ` Simon Wright
2000-07-18  0:00     ` Nick Keighley
2000-07-14  0:00 ` David Kristola
2000-07-14  0:00 ` Andrew Hately
2000-07-15  0:00 ` David Botton
2000-07-15  0:00 ` Marc A. Criley
2000-07-16  0:00   ` David Botton
2000-07-18  0:00   ` David Kristola
2000-07-18  0:00     ` Stefan Skoglund
2000-07-18  0:00     ` Bill Brennan
2000-07-18  0:00       ` Dr. Joachim Schr�er [this message]
2000-07-19  0:00         ` Bill Brennan
2000-07-18  0:00           ` Scott Ingram`
2000-07-21  0:00         ` Keith Thompson
2000-07-25  0:00           ` Keith Thompson
2000-07-25  0:00           ` Dr. Joachim Schr�er
2000-07-25  0:00             ` Florian Weimer
2000-07-26  0:00             ` David Kristola
2000-07-19  0:00       ` David Kristola
2000-07-18  0:00     ` Scott Ingram`
2000-07-24  0:00   ` Richard Riehle
2000-07-26  0:00     ` The Ada type model (was Re: Top 10 Language Constructs (Ada)) Marc A. Criley
replies disabled

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