Floating Point Format What do floating-point numbers represent? • Rational numbers with non-repeating expansions in the given base within the specified exponent range. • They do not represent repeating rational or irrational numbers, or any number too small or too large. CMPE12c 1 Gabriel Hugh Elkaim IEEE Double Precision FP • IEEE Double Precision is similar to SP – 52-bit M • 53 bits of precision with hidden bit – 11-bit E, excess 1023, representing –1022 <- -> 1023 – One sign bit • Always use DP unless memory/file size is important – SP ~ 10-38 … 1038 – DP ~ 10-308 … 10308 • Be very careful of these ranges in numeric computation CMPE12c 2 Gabriel Hugh Elkaim Floating Point Arithmetic Floating Point operations include •Addition •Subtraction •Multiplication •Division They are complicated because… CMPE12c 3 Gabriel Hugh Elkaim Floating Point Addition Decimal Review + 9.997 4.631 9.997 + 0.004631 10.001631 x 102 x 10-1 How do we do this? CMPE12c 1. Align decimal points 2. Add x 102 x 102 x 102 3. Normalize the result • Often already normalized • Otherwise move one digit 1.0001631 x 103 4. Round result 1.000 x 103 4 Gabriel Hugh Elkaim Floating Point Addition Example: 0.25 + 100 in SP FP First step: get into SP FP if not already .25 = 0 01111101 00000000000000000000000 100 = 0 10000101 10010000000000000000000 Or with hidden bit .25 = 0 01111101 1 00000000000000000000000 100 = 0 10000101 1 10010000000000000000000 Hidden Bit CMPE12c 5 Gabriel Hugh Elkaim Floating Point Addition Second step: Align radix points – – – – CMPE12c Shifting F left by 1 bit, decreasing e by 1 Shifting F right by 1 bit, increasing e by 1 Shift F right so least significant bits fall off Which of the two numbers should we shift? 6 Gabriel Hugh Elkaim Floating Point Addition Second step: Align radix points cont. Shift the .25 to increase its exponent so it matches that of 100. 0.25’s e: 01111101 – 1111111 (127) = 100’s e: 10000101 – 1111111 (127) = Shift .25 by 8 then. Easier method: Bias cancels with subtraction, so 10000101 100’s E - 01111101 0.25’s E 00001000 CMPE12c 7 Gabriel Hugh Elkaim Floating Point Addition Carefully shifting the 0.25’s fraction • • • • • • • • • S 0 0 0 0 0 0 0 0 0 CMPE12c E HB 01111101 1 01111110 0 01111111 0 10000000 0 10000001 0 10000010 0 10000011 0 10000100 0 10000101 0 F 00000000000000000000000 10000000000000000000000 01000000000000000000000 00100000000000000000000 00010000000000000000000 00001000000000000000000 00000100000000000000000 00000010000000000000000 00000001000000000000000 8 (original value) (shifted by 1) (shifted by 2) (shifted by 3) (shifted by 4) (shifted by 5) (shifted by 6) (shifted by 7) (shifted by 8) Gabriel Hugh Elkaim Floating Point Addition Third Step: Add fractions with hidden bit 0 10000101 1 10010000000000000000000 (100) 0 10000101 0 00000001000000000000000 (.25) 0 10000101 1 10010001000000000000000 + Fourth Step: Normalize the result • • • CMPE12c Get a ‘1’ back in hidden bit Already normalized most of the time Remove hidden bit and finished 9 Gabriel Hugh Elkaim Floating Point Addition Normalization example + S 0 0 0 E 011 011 011 HB 1 1 11 F 1100 1011 0111 Need to shift so that only a 1 in HB spot 0 CMPE12c 100 1 1011 1 discarded 10 Gabriel Hugh Elkaim Floating Point Example • 0xD4F80000 + 0x56B00000 CMPE12c 11 Gabriel Hugh Elkaim CMPE12c 12 Gabriel Hugh Elkaim Another SP FP Example • 0xD5D00000 + 0x54600000 CMPE12c 13 Gabriel Hugh Elkaim CMPE12c 14 Gabriel Hugh Elkaim Floating Point Subtraction •Mantissa’s are sign-magnitude •Watch out when the numbers are close - 1.23455 1.23456 x 102 x 102 •A many-digit normalization is possible This is why FP addition is in many ways more difficult than FP multiplication CMPE12c 15 Gabriel Hugh Elkaim Floating Point Subtraction Steps to do subtraction 1. Align radix points 2. Perform sign-magnitude operand swap if needed • Compare magnitudes (with hidden bit) • Change sign bit if order of operands is changed. 3. Subtract 4. Normalize 5. Round CMPE12c 16 Gabriel Hugh Elkaim Floating Point Subtraction Simple Example: - S 0 0 E 011 011 HB 1 1 F 1011 1101 switch order and make result negative 0 011 1 1101 - 0 011 1 1011 1 011 0 0010 1 000 1 0000 CMPE12c 17 smaller bigger bigger smaller switched sign Gabriel Hugh Elkaim Floating Point Multiplication Decimal example: 3.0 x 101 x 5.0 x 102 How do we do this? CMPE12c 1. Multiply mantissas 3.0 x 5.0 15.00 2. Add exponents 1+2=3 3. Combine 15.00 x 103 4. Normalize if needed 1.50 x 104 18 Gabriel Hugh Elkaim Floating Point Multiplication Multiplication in binary (4-bit F) x 0 10000100 0100 1 00111100 1100 Step 1: Multiply mantissas (put hidden bit back first!!) 10.00110000 CMPE12c 19 1.0100 x 1.1100 00000 00000 10100 10100 + 10100 1000110000 Gabriel Hugh Elkaim Floating Point Multiplication Second step: Add exponents, subtract extra bias. 11000000 - 01111111 (127) 10000100 + 00111100 01000001 11000000 Third step: Renormalize, correcting exponent 1 01000001 10.00110000 Becomes 1 01000010 1.000110000 Fourth step: Drop the hidden bit 1 01000010 000110000 CMPE12c 20 Gabriel Hugh Elkaim Floating Point Multiplication Multiply these SP FP numbers together x 0x49FC0000 0x4BE00000 CMPE12c 21 Gabriel Hugh Elkaim CMPE12c 22 Gabriel Hugh Elkaim CMPE12c 23 Gabriel Hugh Elkaim Another SP FP Example • 0xC9F4 × 0x484F CMPE12c 24 Gabriel Hugh Elkaim CMPE12c 25 Gabriel Hugh Elkaim Floating Point Division •True division •Unsigned, full-precision division on mantissas •This is much more costly (e.g. 4x) than mult. •Subtract exponents •Faster division •Newton’s method to find reciprocal •Multiply dividend by reciprocal of divisor •May not yield exact result without some work •Similar speed as multiplication CMPE12c 26 Gabriel Hugh Elkaim Questions? CMPE12c 27 Gabriel Hugh Elkaim