In: Computer Science
Convert the following decimal numbers to 32-bit IEEE floating point: 86.59375 -1.59729
Convert the following 32-bit IEEE floating point numbers to decimal:
0100 1100 1110 0110
1111 1000 0000 0000
1011 0101 1110 0110 1010 0110 0000 0000
1)
a)
Converting 86.59375 to binary
Convert decimal part first, then the fractional part
> First convert 86 to binary
Divide 86 successively by 2 until the quotient is 0
> 86/2 = 43, remainder is 0
> 43/2 = 21, remainder is 1
> 21/2 = 10, remainder is 1
> 10/2 = 5, remainder is 0
> 5/2 = 2, remainder is 1
> 2/2 = 1, remainder is 0
> 1/2 = 0, remainder is 1
Read remainders from the bottom to top as 1010110
So, 86 of decimal is 1010110 in binary
> Now, Convert 0.59375 to binary
> Multiply 0.59375 with 2. Since 1.1875 is >= 1. then add 1 to result
> Multiply 0.1875 with 2. Since 0.375 is < 1. then add 0 to result
> Multiply 0.375 with 2. Since 0.75 is < 1. then add 0 to result
> Multiply 0.75 with 2. Since 1.5 is >= 1. then add 1 to result
> Multiply 0.5 with 2. Since 1.0 is >= 1. then add 1 to result
> This is equal to 1, so, stop calculating
0.59375 of decimal is .10011 in binary
so, 86.59375 in binary is 1010110.10011
86.59375 in simple binary => 1010110.10011
so, 86.59375 in normal binary is 1010110.10011 => 1.01011010011 * 2^6
single precision:
--------------------
sign bit is 0(+ve)
exp bits are (127+6=133) => 10000101
Divide 133 successively by 2 until the quotient is 0
> 133/2 = 66, remainder is 1
> 66/2 = 33, remainder is 0
> 33/2 = 16, remainder is 1
> 16/2 = 8, remainder is 0
> 8/2 = 4, remainder is 0
> 4/2 = 2, remainder is 0
> 2/2 = 1, remainder is 0
> 1/2 = 0, remainder is 1
Read remainders from the bottom to top as 10000101
So, 133 of decimal is 10000101 in binary
frac bits are 01011010011000000000000
so, 86.59375 in single-precision format is 0 10000101 01011010011000000000000
in hexadecimal it is 0x42AD3000
b)
Converting 1.59729 to binary
Convert decimal part first, then the fractional part
> First convert 1 to binary
Divide 1 successively by 2 until the quotient is 0
> 1/2 = 0, remainder is 1
Read remainders from the bottom to top as 1
So, 1 of decimal is 1 in binary
> Now, Convert 0.5972900000000001 to binary
> Multiply 0.5972900000000001 with 2. Since 1.1945800000000002 is >= 1. then add 1 to result
> Multiply 0.1945800000000002 with 2. Since 0.3891600000000004 is < 1. then add 0 to result
> Multiply 0.3891600000000004 with 2. Since 0.7783200000000008 is < 1. then add 0 to result
> Multiply 0.7783200000000008 with 2. Since 1.5566400000000016 is >= 1. then add 1 to result
> Multiply 0.5566400000000016 with 2. Since 1.1132800000000032 is >= 1. then add 1 to result
> Multiply 0.11328000000000316 with 2. Since 0.2265600000000063 is < 1. then add 0 to result
> Multiply 0.2265600000000063 with 2. Since 0.4531200000000126 is < 1. then add 0 to result
> Multiply 0.4531200000000126 with 2. Since 0.9062400000000252 is < 1. then add 0 to result
> Multiply 0.9062400000000252 with 2. Since 1.8124800000000505 is >= 1. then add 1 to result
> Multiply 0.8124800000000505 with 2. Since 1.624960000000101 is >= 1. then add 1 to result
> Multiply 0.624960000000101 with 2. Since 1.249920000000202 is >= 1. then add 1 to result
> Multiply 0.24992000000020198 with 2. Since 0.49984000000040396 is < 1. then add 0 to result
> Multiply 0.49984000000040396 with 2. Since 0.9996800000008079 is < 1. then add 0 to result
> Multiply 0.9996800000008079 with 2. Since 1.9993600000016158 is >= 1. then add 1 to result
> Multiply 0.9993600000016158 with 2. Since 1.9987200000032317 is >= 1. then add 1 to result
> Multiply 0.9987200000032317 with 2. Since 1.9974400000064634 is >= 1. then add 1 to result
> Multiply 0.9974400000064634 with 2. Since 1.9948800000129268 is >= 1. then add 1 to result
> Multiply 0.9948800000129268 with 2. Since 1.9897600000258535 is >= 1. then add 1 to result
> Multiply 0.9897600000258535 with 2. Since 1.979520000051707 is >= 1. then add 1 to result
> Multiply 0.979520000051707 with 2. Since 1.959040000103414 is >= 1. then add 1 to result
> Multiply 0.9590400001034141 with 2. Since 1.9180800002068281 is >= 1. then add 1 to result
> Multiply 0.9180800002068281 with 2. Since 1.8361600004136562 is >= 1. then add 1 to result
> Multiply 0.8361600004136562 with 2. Since 1.6723200008273125 is >= 1. then add 1 to result
> Multiply 0.6723200008273125 with 2. Since 1.344640001654625 is >= 1. then add 1 to result
> Multiply 0.34464000165462494 with 2. Since 0.6892800033092499 is < 1. then add 0 to result
> Multiply 0.6892800033092499 with 2. Since 1.3785600066184998 is >= 1. then add 1 to result
> Multiply 0.37856000661849976 with 2. Since 0.7571200132369995 is < 1. then add 0 to result
> Multiply 0.7571200132369995 with 2. Since 1.514240026473999 is >= 1. then add 1 to result
> Multiply 0.514240026473999 with 2. Since 1.028480052947998 is >= 1. then add 1 to result
> Multiply 0.028480052947998047 with 2. Since 0.056960105895996094 is < 1. then add 0 to result
> Multiply 0.056960105895996094 with 2. Since 0.11392021179199219 is < 1. then add 0 to result
> Multiply 0.11392021179199219 with 2. Since 0.22784042358398438 is < 1. then add 0 to result
> Multiply 0.22784042358398438 with 2. Since 0.45568084716796875 is < 1. then add 0 to result
> Multiply 0.45568084716796875 with 2. Since 0.9113616943359375 is < 1. then add 0 to result
> Multiply 0.9113616943359375 with 2. Since 1.822723388671875 is >= 1. then add 1 to result
> Multiply 0.822723388671875 with 2. Since 1.64544677734375 is >= 1. then add 1 to result
> Multiply 0.64544677734375 with 2. Since 1.2908935546875 is >= 1. then add 1 to result
> Multiply 0.2908935546875 with 2. Since 0.581787109375 is < 1. then add 0 to result
> Multiply 0.581787109375 with 2. Since 1.16357421875 is >= 1. then add 1 to result
> Multiply 0.16357421875 with 2. Since 0.3271484375 is < 1. then add 0 to result
> Multiply 0.3271484375 with 2. Since 0.654296875 is < 1. then add 0 to result
> Multiply 0.654296875 with 2. Since 1.30859375 is >= 1. then add 1 to result
> Multiply 0.30859375 with 2. Since 0.6171875 is < 1. then add 0 to result
> Multiply 0.6171875 with 2. Since 1.234375 is >= 1. then add 1 to result
> Multiply 0.234375 with 2. Since 0.46875 is < 1. then add 0 to result
> Multiply 0.46875 with 2. Since 0.9375 is < 1. then add 0 to result
> Multiply 0.9375 with 2. Since 1.875 is >= 1. then add 1 to result
> Multiply 0.875 with 2. Since 1.75 is >= 1. then add 1 to result
> Multiply 0.75 with 2. Since 1.5 is >= 1. then add 1 to result
> Multiply 0.5 with 2. Since 1.0 is >= 1. then add 1 to result
> This is equal to 1, so, stop calculating
0.5972900000000001 of decimal is .10011000111001111111111101011000001110100101001111 in binary
so, 1.59729 in binary is 1.10011000111001111111111101011000001110100101001111
-1.59729 in simple binary => 1.10011000111001111111111101011000001110100101001111
so, -1.59729 in normal binary is 1.10011000111001111111111101011000001110100101001111 => 1.10011000111001111111111 * 2^0
single precision:
--------------------
sign bit is 1(-ve)
exp bits are (127+0=127) => 01111111
Divide 127 successively by 2 until the quotient is 0
> 127/2 = 63, remainder is 1
> 63/2 = 31, remainder is 1
> 31/2 = 15, remainder is 1
> 15/2 = 7, remainder is 1
> 7/2 = 3, remainder is 1
> 3/2 = 1, remainder is 1
> 1/2 = 0, remainder is 1
Read remainders from the bottom to top as 1111111
So, 127 of decimal is 1111111 in binary
frac bits are 10011000111001111111111
so, -1.59729 in single-precision format is 1 01111111 10011000111001111111111
in hexadecimal it is 0xBFCC73FF
2)
a)
0 10011001 11001101111100000000000
sign bit is 0(+ve)
exp bits are 10011001
=> 10011001
=> 1x2^7+0x2^6+0x2^5+1x2^4+1x2^3+0x2^2+0x2^1+1x2^0
=> 1x128+0x64+0x32+1x16+1x8+0x4+0x2+1x1
=> 128+0+0+16+8+0+0+1
=> 153
in decimal it is 153
so, exponent/bias is 153-127 = 26
frac bits are 110011011111
IEEE-754 Decimal value is 1.frac * 2^exponent
IEEE-754 Decimal value is 1.110011011111 * 2^26
1.110011011111 in decimal is 1.804443359375
=> 1.110011011111
=> 1x2^0+1x2^-1+1x2^-2+0x2^-3+0x2^-4+1x2^-5+1x2^-6+0x2^-7+1x2^-8+1x2^-9+1x2^-10+1x2^-11+1x2^-12
=> 1x1+1x0.5+1x0.25+0x0.125+0x0.0625+1x0.03125+1x0.015625+0x0.0078125+1x0.00390625+1x0.001953125+1x0.0009765625+1x0.00048828125+1x0.000244140625
=> 1+0.5+0.25+0.0+0.0+0.03125+0.015625+0.0+0.00390625+0.001953125+0.0009765625+0.00048828125+0.000244140625
=> 1.804443359375
so, 1.804443359375 * 2^26 in decimal is 121094144.0
so, 01001100111001101111100000000000 in IEEE-754 single precision format is 121094144.0
Answer: 121094144.0
b)
1 01101011 11001101010011000000000
sign bit is 1(-ve)
exp bits are 01101011
=> 01101011
=> 0x2^7+1x2^6+1x2^5+0x2^4+1x2^3+0x2^2+1x2^1+1x2^0
=> 0x128+1x64+1x32+0x16+1x8+0x4+1x2+1x1
=> 0+64+32+0+8+0+2+1
=> 107
in decimal it is 107
so, exponent/bias is 107-127 = -20
frac bits are 11001101010011
IEEE-754 Decimal value is 1.frac * 2^exponent
IEEE-754 Decimal value is 1.11001101010011 * 2^-20
1.11001101010011 in decimal is 1.80194091796875
=> 1.11001101010011
=> 1x2^0+1x2^-1+1x2^-2+0x2^-3+0x2^-4+1x2^-5+1x2^-6+0x2^-7+1x2^-8+0x2^-9+1x2^-10+0x2^-11+0x2^-12+1x2^-13+1x2^-14
=> 1x1+1x0.5+1x0.25+0x0.125+0x0.0625+1x0.03125+1x0.015625+0x0.0078125+1x0.00390625+0x0.001953125+1x0.0009765625+0x0.00048828125+0x0.000244140625+1x0.0001220703125+1x6.103515625e-05
=> 1+0.5+0.25+0.0+0.0+0.03125+0.015625+0.0+0.00390625+0.0+0.0009765625+0.0+0.0+0.0001220703125+6.103515625e-05
=> 1.80194091796875
so, 1.80194091796875 * 2^-20 in decimal is 1.7184647731482983e-06
so, 10110101111001101010011000000000 in IEEE-754 single precision format is -1.7184647731482983e-06
Answer: -0.0000017184647731482983