set 16 floating point arithmetic
DESCRIPTION
Set 16 FLOATING POINT ARITHMETIC. TOPICS Binary representation of floating point Numbers Computer representation of floating point numbers Floating point instructions. BINARY REPRESENTATION OF FLOATING POINT NUMBERS Converting decimal fractions into binary representation. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/1.jpg)
Set 16FLOATING POINT ARITHMETIC
![Page 2: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/2.jpg)
TOPICS
Binary representation of floating point Numbers
Computer representation of floating point numbers
Floating point instructions
![Page 3: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/3.jpg)
BINARY REPRESENTATION OF FLOATING POINT NUMBERS
Converting decimal fractions into binary representation.
Consider a decimal fraction of the form: 0.d1d2...dn
We want to convert this to a binary fraction of the form:
0.b1b2...bn (using binary digits instead of decimal digits)
![Page 4: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/4.jpg)
Algorithm for conversion
Let X be a decimal fraction: 0.d1d2..dn
i = 1
Repeat until X = 0 or i = required no. of binary fractional digits {
Y = X * 2 X = fractional part of Y Bi = integer part of Y
i = i + 1
}
![Page 5: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/5.jpg)
EXAMPLE 1
Convert 0.75 to binary
X = 0.75 (initial value)
X* 2 = 1.50. Set b1 = 1, X = 0.5
X* 2 = 1.0. Set b2 = 1, X = 0.0
The binary representation for 0.75 is thus
0.b1b2 = 0.11b
![Page 6: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/6.jpg)
Let's consider what that means...
In the binary representation
0.b1b2...bm
b1 represents 2-1 (i.e., 1/2)
b2 represents 2-2 (i.e., 1/4)
...
bm represents 2-m (1/(2m))
So, 0.11 binary represents
2-1 + 2-2 = 1/2 + 1/4 = 3/4 = 0.75
![Page 7: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/7.jpg)
EXAMPLE 2
Convert the decimal value 4.9 into binary
Part 1: convert the integer part into binary: 4 = 100b
![Page 8: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/8.jpg)
Part 2.
Convert the fractional part into binary using multiplication by 2:
X = .9*2 = 1.8. Set b1 = 1, X = 0.8
X*2 = 1.6. Set b2 = 1, X = 0.6
X*2 = 1.2. Set b3 = 1, X = 0.2
X*2 = 0.4. Set b4 = 0, X = 0.4
X*2 = 0.8. Set b5 = 0, X = 0.8,
which repeats from the second line above.
![Page 9: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/9.jpg)
Since X is now repeating the value 0.8,
we know the representation will repeat.
The binary representation of 4.9 is thus:
100.1110011001100...
![Page 10: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/10.jpg)
COMPUTER REPRESENTATION OF FLOATING POINT NUMBERS
In the CPU, a 32-bit floating point number is represented using IEEE standard format as follows:
S | EXPONENT | MANTISSA
where S is one bit, the EXPONENT is 8 bits, and the MANTISSA is 23 bits.
![Page 11: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/11.jpg)
•The mantissa represents the leading significant bits in the number.
•The exponent is used to adjust the position of the binary point (as opposed to a "decimal" point)
![Page 12: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/12.jpg)
The mantissa is said to be normalized when it is expressed as a value between 1 and 2. I.e., the mantissa would be in the form 1.xxxx.
![Page 13: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/13.jpg)
The leading integer of the binary representation is not stored. Since it is always a 1, it can be easily restored.
![Page 14: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/14.jpg)
The "S" bit is used as a sign bit and indicates whether the value represented is positive or negative
(0 for positive, 1 for negative).
![Page 15: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/15.jpg)
If a number is smaller than 1, normalizing the mantissa will produce a negative exponent.
But 127 is added to all exponents in the floating point representation, allowing all exponents to be represented by a positive number.
![Page 16: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/16.jpg)
Example 1. Represent the decimal value 2.5 in 32-bit floating point format.
2.5 = 10.1b
In normalized form, this is: 1.01 * 21
The mantissa: M = 01000000000000000000000
(23 bits without the leading 1)
The exponent: E = 1 + 127 = 128 = 10000000b
The sign: S = 0 (the value stored is positive)
So, 2.5 = 01000000001000000000000000000000
![Page 17: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/17.jpg)
Example 2: Represent the number -0.00010011b in floating point form.
0.00010011b = 1.0011 * 2-4
Mantissa: M = 00110000000000000000000 (23 bits with the integral 1 not represented)
Exponent: E = -4 + 127 = 01111011b
S = 1 (as the number is negative)
Result: 1 01111011 00110000000000000000000
![Page 18: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/18.jpg)
Exercise 1: represent -0.75 in floating point format.
Exercise 2: represent 4.9 in floating point format.
![Page 19: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/19.jpg)
FLOATING POINT INSTRUCTIONS
Floating point Architecture: 8 80-bit stack registers ST(0), ST(1), ..,ST(7) (ST(0) can be abbreviated as ST)
To use the floating point stack, we: Push data from memory onto the stack
Process dataPop data from stack to memory.
![Page 20: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/20.jpg)
Some floating point instructions:
INSTRUCTION DESCRIPTION
Push and pops
FLD, FSTP Push and pop floating point data
FILD, FISTP Push and pop integer data
Arithmetic In all 4 cases below, the stack is popped subsequently.
So the ST(1) shown becomes ST(0)
FADD ST(1) = ST(1) + ST(0)
FSUB ST(1) = ST(1) - ST(0)
FMUL ST(1) = ST(1) * ST(0)
FSUB ST(1) = ST(1) / ST(0)
![Page 21: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/21.jpg)
Trigonometry
FSIN ST(0) = sine of ST(0) radians
FCOS ST(0) = cosine of ST(0) radians
FTAN ST(0) = tan of ST(0) radians
FLDPI Push value of onto stack
![Page 22: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/22.jpg)
Example 1.
X DD 3.4
Y DD 2 'This is an integer, while 2.0 is flt. pt.
Z DD ?
To evaluate Z = X + Y
FLD X ;ST(0) = X
FILD Y ;ST(0) = Y, ST(1) = X
FADD ;ST(0) = X + Y
FSTP Z ;Z = X + Y
![Page 23: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/23.jpg)
Example 2. To evaluate X * Y - U / VX DD 3.9Y DD 2.8 U DD 7.3V DD 4.62 ______code follows ___________ FLD X ;st(0) = X FLD Y ;st(0) = Y, st(1) = X FMUL ;st(0) = X*Y FLD U ;st(0) = U, st(1) = X*Y FLD V ;st(0) = V, st(1) = U, st(2) = X*Y FDIV ;st(0) = U/V, st(1) = X*Y FSUB ;st(0) = X*Y - U / V FSTP Z ;Z = result, st(0) = empty
![Page 24: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/24.jpg)
Util.lib contains the following subroutines for inputting and outputting floating point numbers:
GetFP This inputs a no. such as 33 or 3.56 from the keyboard, and pushes it, in binary floating point form, onto the floating point stack.
PutFP This pops the number from the top of the floating point stack, and outputs it to the keyboard in ascii.
![Page 25: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/25.jpg)
Note
The example following assumes that you have a copy of mymacros.txt in your masm615/programs directory which includes the extrns and includelib statements discussed in the slides on macros.
![Page 26: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/26.jpg)
Example 3. Calculating Area of a Circle
title calculation area of circle with inputted radius
include mymacros.txt
.model small
.stack 100h
.data
radius dd ?
.386
.code
circle proc
startup
![Page 27: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/27.jpg)
display "Enter the radius: "
infp ; macro for: call getfp
fld st ; this pushes st(0), so st(0) = st(1)
fmul
fldpi
fmul
display "The area of the circle is "
outfp ; macro for: call putfp
endup
circle endp
end circle
![Page 28: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/28.jpg)
fabs replaces st (i.e. st(0)) by its absolute value
fsqrt replaces st by its square root
frndint rounds st up or down to the nearest integer
![Page 29: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/29.jpg)
We have already covered fadd used without arguments.
Given,e.g.:m dd 3.6n dd 21
fadd m will set st(0) = st(0) + m
fiadd n will do the same after converting the integer n to floating point
fadd st(3) will set st(0) = st(0) + st(3)
![Page 30: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/30.jpg)
The same variations apply to:
fmul
fdiv fld
e.g: fld stwill push the value of st onto the stack, so now the top two members of the stack will have this value.
![Page 31: Set 16 FLOATING POINT ARITHMETIC](https://reader035.vdocuments.site/reader035/viewer/2022062309/56815a34550346895dc77417/html5/thumbnails/31.jpg)
Read chapter 19 of textbook