As Wi-Fi growth and popularity continues to climb, not everyone understands the risks that come with connecting to public Wi-Fi or even offering Wi-Fi to employees, visitors and guests. Download the resource kit to make sure your safe wherever business takes you!

What you've been asked to do is code the floating point operations for a 16-bit register/word. (Obviously homework.)

I assume that your code will perform the basic math functions (add, subtract, multiply, and divide). Add and subtract can be coded as one function, multiply and divide are unique.

A 16 bit integer looks like this:

0000000000000001

Exponential notation says that 1E+0 is the representation for 1 in base 10. 1E+6 is the exponential notation for a million, 1E+100 is a google.

If you consider the exponent to be in base 2 (binary) instead of base 10, the floating point arithmetic makes more sense. 1E+0 is 1, 1E+1 is 2, 1E+2 is 4, etc... This simply says that shifting a 1 left by the number of bits in the exponent gives the number.

That's what your floating point format says, except that the exponent is biased. Biasing the exponent means that the exponent can never be negative. You've got a 5 bit exponent, so whatever the true value is, simply add 10000(2) to it to get the biased value.

Confused? Don't be. Let's convert the integer 1 to a floating point 1. The way to do that is to insert the exponent into the 16 bit value in the correct location.

The exponent is 0 because we don't need to shift the 1. A 1 is a 1 and we're starting with an integer 1. We add the bias to it and the exponent becomes 10000(2) + 0 = 10000(2). Inserting this value into the word gives us

0100000000000001

This is an un-normalized 1. To normalize the value, we need to left shift the mantissa until the top bit is a 1. For every bit that we shift the mantissa, we need to adjust the exponent by decrementing it 1.

0011110000000010

0011100000000100

0011010000001000

0011000000010000

0010110000100000

0010100001000000

0010010010000000

0010000100000000

0001111000000000

There you have it -- a "normalized" 1 in the floating point format that you've described.

This is the foundation. There's a lot more that you'll have to know/do to actually build the functions.

Good Luck!

Kent