# Floating Point

## 6 October

• Exams

• Division Example

• Floating Point

## Division Example

 Iteration Step Quotient Divisor Remainder 0 Initial values 0000 0010 0000 0000 0111 1 Negative 0000 0001 0000 0000 0111 2 Negative 0000 0000 1000 0000 0111 3 Negative 0000 0000 0100 0000 0111 4 Positive 0001 0000 0010 0000 0011 5 Positive 0011 0000 0001 0000 0001

## Floating Point

• Many numeric applications require numbers over a VERY large range. (e.g. nanoseconds to centuries)

• Most scientific applications require fractions (e.g. )

• But so far we only have integers.

• We *COULD* implement the fractions explicitly (e.g. ½, 1023/102934)

• We *COULD* use bigger integers

• Floating point is a better answer for most applications.

## Floating Point

• Just Scientific Notation for computers (e.g. -1.345*1012)

• Representation in IEEE 754 floating point standard

• value = (1-2*sign) * significand * 2exponent

• more bits for significand gives more precision

• more bits for exponent increases range

## Normalization

• In Scientific Notation: 1234000 = 1234 x 103 = 1.234 x 106

• Likewise in Floating Point: 1011000 = 1011 x 23 = 1.011 x 26

• The standard says we should always keep them normalized so that the first digit is 1 and the binary point comes immediately after.

• But wait! There’s more! If we know the first bit is 1 why store it?

## IEEE 754 floating-point standard

• Leading “1” bit of significand is implicit

• We want both positive and negative exponents for big and small numbers.

• Exponent is “biased” to make comparison easier

• all 0s is smallest exponent all 1s is largest

• bias of 127 for single precision and 1023 for double precision

• summary: (1-2*sign) * (1+significand) * 2exponent – bias

## Example

• decimal: -.75 = -3/4 = -3/22

• binary: -.11 = -1.1 x 2-1

• floating point: exponent = 126 = 01111110

• IEEE single precision: 10111111010000000000000000000000

## Arithmetic in Floating Point

• In Scientific Notation we learned that to add to numbers you must first get a common exponent:

• 1.23 x 103 + 4.56 x 106 ==

• 0.00123 x 106 + 4.56 x 106 ==

• 4.56123 x 106

• In Scientific Notation, we can multiply numbers by multiplying the significands and adding the exponents

• 1.23 x 103 x 4.56 x 106 ==

• (1.23 x 4.56) x 103+6 ==

• 5.609 x 109

• We use exactly these same rules in Floating point PLUS we add a step at the end to keep the result normalized.

## Floating point AIN’T NATURAL

It is CRUCIAL for computer scientists to know that Floating Point arithmetic is NOT the arithmetic you learned since childhood

• 1.0 is NOT EQUAL to 10*0.1 (Why?)

• 1.0 * 10.0 == 10.0

• 0.1 * 10.0 != 1.0

• 0.1 decimal == 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + … ==

• 0.0 0011 0011 0011 0011 0011 …

• In decimal 1/3 is a repeating fraction 0.333333…

• If you quit at some fixed number of digits, then 3 * 1/3 != 1

• Floating Point arithmetic IS NOT associative

• x + (y + z) is not necessarily equal to (x + y) + z

• Addition may not even result in a change

• (x + 1) MAY == x

## Floating Point Complexities

• In addition to overflow we can have “underflow”

• Accuracy can be a big problem

• IEEE 754 keeps two extra bits, guard and round

• four rounding modes

• Non-zero divided by zero yields “infinity” INF

• Zero divided by zero yields “not a number” NAN

• Implementing the standard can be tricky

• Not using the standard can be worse

## MIPS floating point

• Floating point “Co-processor”

• 32 Floating point registers separate from 32 general purpose registers

• 32 bits wide each.

• use an even-odd pair for double precision

• add.d fd, fs, ft # fd = fs + ft in double precision

• add.s fd, fs, ft # fd = fs + ft in single precision

• sub.d, sub.s, mul.d, mul.s, div.d, div.s, abs.d, abs.s

• l.s, s.d, s.s

• Conversion instructions

• Compare instructions

• Branch (bc1t, bc1f)

## Chapter 3 Summary

• Computer arithmetic is constrained by limited precision

• Bit patterns have no inherent meaning but standards do exist

• two’s complement

• IEEE 754 floating point

• Computer instructions determine “meaning” of the bit patterns

• Performance and accuracy are important so there are many complexities in real machines (i.e., algorithms and implementation).

• Accurate numerical computing requires methods quite different from those of the math you learned in grade school.

## Cultural Highlight

Go to the State Fair!

last edited 2005-10-06 17:33:20 by GaryBishop