# Challenge: Computer representation of numbers

Challenge:

You are in charge of the US Census for 2000. You must design computers to keep track of people. How many bytes should you devote to the population count?
```Answer: There are about 281,000,000 people in the US.
This requires 29 bits to represent, because

2^28  = 268,435,456
2^29  = 536,870,912
```

Challenge:

You are given a single byte, 8 bits, for storing signed, floating-point numbers. You have two choices:
• A: 1 bit for sign, 3 bits for a signed exponent, 4 bits for normalized mantissa
• B: 1 bit for sign, 4 bits for a signed exponent, 3 bits for normalized mantissa
Answer the following questions for case A or case B:
1. What is the largest positive value you can express?
2. What is the smallest positive value you can express?
3. What is the "average" spacing between values in your system? That is, what is the total range of positive values, divided by the number of different values inside that range?
4. How many different values does your system have between the numbers 5.1 and 6.8?
```Answer for Case A:

I will use the convention that a "0" for a sign bit indicates "+",
and a "1" for a sign bit indicates "-".  Then we have

sign   mantissa          sign  exponent
---------------------------------------
largest positive value:     0    1   1   1   1      0    1   1

1   1   1   1           +3
- + - + - + -          2
2   4   8   16

0.9375  x  8    =  7.5

smallest positive value:    0    1   0   0   0      1    1   1

1                       -3
-                      2
2

0.5     x  1/8  =  0.0625

Average spacing:  There are 8 different values for the normalized mantissa
(remember, the first digit must be "1").
There are 7 possible exponents: -3, -2, -1, 0, 1, 2, 3.
That makes 56 combinations.
The range of 0.0625 to 7.5, divided by 56 different
values, yields an average spacing of about 0.13.

How many values between 5.1 and 6.8?

The exponent must be +3, since the mantissa must
be at least 0.5.  There are 8 possibilities to check:

mantissa  1000       yields  0.5    * 8   =   4
1001               0.5625 * 8   =   4.5
1010               0.625  * 8   =   5
1011               0.6875 * 8   =   5.5
1100               0.75   * 8   =   6
1101               0.8125 * 8   =   6.5
1110               0.875  * 8   =   7
1111               0.9375 * 8   =   7.5

Three of these values fall into the desired range:
5.5, 6.0, 6.5.

```