comp.lang.ada
 help / color / mirror / Atom feed
From: "Stuart" <stuart@0.0>
Subject: Re: How to put 200 into an integer sub-type of 16 bits (code included)
Date: Thu, 15 Jan 2009 12:40:38 -0000
Date: 2009-01-15T12:40:38+00:00	[thread overview]
Message-ID: <496f2a60$1_1@glkas0286.greenlnk.net> (raw)
In-Reply-To: 1a2b31ac-cf6b-44e3-85b7-04594460db87@d36g2000prf.googlegroups.com

"ChristopherL" <clusardi2k@aol.com> wrote in message 
news:1a2b31ac-cf6b-44e3-85b7-04594460db87@d36g2000prf.googlegroups.com...
<snip>
> So, what is the proper way to store a number (never being greater
> than 200.5) in a 8 bit short number as outlined above?

then

"Stuart" <stuart@0.0> wrote in message 
news:496f03e2$1_1@glkas0286.greenlnk.net...
> OK - there is no 'proper' way, there are several ways, each of which has
> advantages and disadvantages.
<snip>

To add to what I wrote before, and depending on what you are trying to 
achieve, you might find the following Ada code of interest:

with Ada.Unchecked_Conversion;
procedure ada_main is
   type Flt is digits 7 range -1000.0 .. 1000.0;  -- !!! or whatever!

   -- The condition we need to allow the range 0.0..200.0 to be stored with
   -- most precision in 8 bits is:
   --      255 * small > 200.0 - small/2
   --   => 255.5 * small > 200.0
   --   => small > 200.0 / 255.5
   Fxd_Small : constant := 0.782778865;
      -- !!! There seem to be some issues with GNAT debugger using an 
expression here!

   type Fxd is delta Fxd_Small range 0.0 .. 200.0;
   for  Fxd'small use Fxd_Small;
   for  Fxd'size use 8;

   type Int is mod 256;  -- In case you really want the underlying 'integer' 
representation
   for  Int'size use 8;

   function to_Int is new Ada.Unchecked_Conversion(Source => Fxd, Target => 
Int);

   -- Create some volatile variables to force code to be generated.
   X : Flt;
   pragma volatile(X);
   Y : Fxd;
   for Y'size use 8;
   pragma volatile(Y);

   Z : Int;
   for Z'size use 8;
   pragma volatile(Z);

begin
   X := 200.0;
   Y := Fxd(X);    -- 199.6086
   -- Note: Read up about model numbers !!!
   -- This is the closest model number to 200.0 for Fxd.
   Z := to_Int(Y);  -- 255
end ada_main;

Regards
   Stuart 





  parent reply	other threads:[~2009-01-15 12:40 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <407ae64d-3cb3-4310-b59e-f1bbae9910a5@t39g2000prh.googlegroups.com>
2009-01-14  1:33 ` How to put 200 into an integer sub-type of 16 bits (code included) Brian Drummond
     [not found]   ` <3d3719f4-355c-4094-9902-495d612d46fe@n33g2000pri.googlegroups.com>
2009-01-14  9:06     ` Ludovic Brenta
2009-01-14 10:08     ` Georg Bauhaus
2009-01-14 10:29       ` Georg Bauhaus
2009-01-14 12:47     ` Brian Drummond
2009-01-14 12:53     ` Brian Drummond
     [not found]       ` <f4894476-851e-493f-93a2-168976bd97fb@s1g2000prg.googlegroups.com>
2009-01-14 16:08         ` Adam Beneschan
2009-01-14 21:17           ` sjw
     [not found]           ` <139961e9-bae6-4e60-8ff7-4f4779b27481@z6g2000pre.googlegroups.com>
2009-01-14 20:41             ` Adam Beneschan
     [not found]               ` <c265ffb7-6159-4d85-b259-78b830e115f9@v18g2000pro.googlegroups.com>
2009-01-15  2:39                 ` SteveD@teranews.com
     [not found]               ` <3625f980-4406-4f51-b494-dd4a48cab840@p36g2000prp.googlegroups.com>
2009-01-15  6:53                 ` Michael Bode
2009-01-15  8:57                   ` Martin
     [not found]               ` <fc154f52-7168-447a-bcd3-6ece9066ebf7@r37g2000prr.googlegroups.com>
2009-01-15 10:29                 ` Georg Bauhaus
     [not found]               ` <1a2b31ac-cf6b-44e3-85b7-04594460db87@d36g2000prf.googlegroups.com>
2009-01-14 22:47                 ` Adam Beneschan
2009-01-14 23:11                 ` Ludovic Brenta
2009-01-15  9:56                 ` Stuart
2009-01-15 12:40                 ` Stuart [this message]
2009-01-15 14:02                 ` Stephen Leake
2009-01-15 15:54                   ` Dmitry A. Kazakov
2009-01-15 16:29                     ` Hyman Rosen
2009-01-15 22:15                       ` Dmitry A. Kazakov
2009-01-16  9:11                         ` Jacob Sparre Andersen
2009-01-16 11:03                           ` Mike H
2009-01-16 22:16                           ` Brian Drummond
2009-01-14 21:32             ` sjw
2009-01-14 21:51             ` Brian Drummond
2009-01-14 18:49     ` Jeffrey R. Carter
2009-01-15 10:12       ` Quote of the Day (Re: " Peter Hermann
2009-01-14 21:09   ` sjw
2009-01-14 21:16     ` Adam Beneschan
2009-01-14 23:09       ` Martin
2009-01-15  0:07         ` Adam Beneschan
2009-01-15  3:09           ` Randy Brukardt
2009-01-15 16:28             ` Adam Beneschan
2009-01-15 21:21               ` Robert A Duff
2009-01-16  1:17                 ` Adam Beneschan
2009-01-16 14:55                   ` Robert A Duff
2009-01-15 14:44     ` Brian Drummond
     [not found]       ` <3f1f2f67-5d69-4baf-8e8c-0d2b5f68475f@p36g2000prp.googlegroups.com>
2009-01-15 16:36         ` How to put 200.0 (is float variable of 32 bits) into an integer sub-type of 10 bits (complete program included) Adam Beneschan
     [not found]         ` <8e64f509-f6fe-4d86-ae1a-fe0b1c88555a@v5g2000pre.googlegroups.com>
2009-01-15 17:09           ` christoph.grein
2009-01-15 17:17             ` Adam Beneschan
2009-01-15 17:29               ` Georg Bauhaus
     [not found]                 ` <09b4a056-688d-49c8-b935-fa0b30f1ae84@w1g2000prk.googlegroups.com>
2009-01-15 18:40                   ` Mike H
     [not found]                     ` <be26729d-9458-42fa-8c8c-004ca33b790d@f33g2000vbf.googlegroups.com>
2009-01-15 20:57                       ` Niklas Holsti
     [not found]                 ` <97231951-54a0-4df7-bb73-04261b34287f@e6g2000vbe.googlegroups.com>
2009-01-16  3:17                   ` Steve D
     [not found]             ` <a61abb30-bc60-4d13-b298-f369ddc8f741@z6g2000pre.googlegroups.com>
2009-01-15 18:15               ` Martin
2009-01-15 18:34               ` Stuart
2009-01-15 17:23           ` Georg Bauhaus
     [not found]         ` <d3b7ad53-af51-4ac5-9167-7cb99e61b2b1@v5g2000pre.googlegroups.com>
2009-01-15 17:50           ` Stuart
     [not found] <6c7964a6-1733-434b-b1b1-962baa4ebba2@p23g2000prp.googlegroups.com>
2009-01-13 21:01 ` How to put 200 into an integer sub-type of 16 bits (code included) Ludovic Brenta
replies disabled

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