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 09:56:25 -0000
Date: 2009-01-15T09:56:25+00:00	[thread overview]
Message-ID: <496f03e2$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 much>

> Please remove the rounding operation for now from this discussion.

OK.

> This problem was given to me to try to solve who said it's probably
> impossible!

Not being funny or anything but it might be as well to describe the problem 
as given.  I think the exchanges elsewhere in this thread demonstrate that 
there is a great deal of confusion.

> The size of floating point number is 32 bits on my system, and my
> float will always be positive.
>
> General information about floating point numbers in general:

<snip description of sign + biased exponent + mantissa representation>

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

OK - there is no 'proper' way, there are several ways, each of which has 
advantages and disadvantages.

I get the impression that you have a 'real' input in the range: 0.0 .. 200.5 
and you want to have this value held in an 8-bit variable.

You do not say to what precision you need this value, or how this precision 
might vary over the value range.  Floating point representations provide a 
relative precision, so while values around 200.0 might only be represented 
with a precision of 1.0, values around 20.0 would be represented with a 
precision of 0.1, and those around 2.0 with a precision of 0.01.  Fixed 
point representations provide a fixed precision, so all values might be 
represented with a precision of 1.0 whether they be 200.0, 20.0 or 2.0.

You need to clarify what your requirements are!

If fixed point precision is adequate to your needs then you should find that 
Ada fixed point types will meet your needs most adequately (you may need to 
specify the 'small attribute to extract the maximum amount of precision) and 
you will be able to use a simple type conversion.

If you need floating point precision things are going to be more difficult 
because you are going to have to roll your own representation.  You seem to 
have done some research on floating point representations so I won't go into 
detail now, but I would note that:
   a) You do not need a sign bit as all values are positive.
   b) You might want to consider something other than base 2 representation 
to eke out a little more precision given your data range (200.5).

On the subject of extracting 'values' out of  floating point representations 
I should like to suggest you track down a copy of the PowerPC Compiler 
Writers guide - this shows a process for injecting/extracting values by 
adding/subtracting a bias to move the values of interest to a more useful 
part of the representation and exclude the effects of the biased exponent. 
(The method may be described elsewhere - but this is one that I am familiar 
with and the guide is available on-line (or was).

On the subject of range you may need to think very carefully about whether 
200.5 is or isn't in your number range.  It may be the case that when you 
look at alternative number bases it will become a moot point, but in your 
earlier examples you were running into a constraint problem because 200.5 
was being rounded up to 201.  (Read a bit more about rounding if you are 
unclear about this).

Regards
   Stuart




Chris L. 





  parent reply	other threads:[~2009-01-15  9:56 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 [this message]
2009-01-15 12:40                 ` Stuart
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