# 計算機結構作業三
110590007白宸安
## 1

---

---

## 2
(16 points) Consider two unsigned binary numbers: M = 0111 and N = 1101.
(a) (8 points) Write down each step of M × N according to version 1 of the multiply algorithm.
(b) (8 points) Write down each step of M × N according to version 2 of the multiply algorithm.
ans :
(a) 0111 * 1101 = 0101 1011
```
Multiplier Multiplicand Product
1101 0000 0111 0000 0000
0110 0000 1110 0000 0111
0011 0001 1100 0000 0111
0001 0011 1000 0010 0011
0000 0111 0000 0101 1011
```
(b) 0111 * 1101 = 0101 1011
```
Multiplicand Product
0111 0000 1101
0111 1101
0111 00111 110
0111 000111 11
100011 11
0111 0100011 1
1011011 1
0111 0101 1011
```
## 3
(20 points) Consider two signed binary numbers: M = 0111 and N = 0110.
(a) (10 points) Write down each step of M ÷ N according to version 1 of the divide algorithm.
(b) (10 points) Write down each step of M ÷ N according to version 2 of the divide algorithm.
ans :
(a) 0111 / 0110
=> quot = 0001
=> remainder = 0000 0001
注意:直接開始
```
quot divisor remainder
0000 0110 0000 0000 0111
1010 0111
000 0 0000 0111
000 0 0 0110 000 0000 0111
1101 0111
00 00 0000 0111
00 00 00 0110 00 0000 0111
1110 1111
0 000 0000 0111
0 000 000 0110 0 0000 0111
1111 1011
0000 0000 0111
0000 0000 0110 0000 0111
0000 0001
0001 0000 0001
0001 0000 0011 0000 0001
```
(b) 0111 / 0110
=> quot = 0001
=> remainder = 0000 0001
注意:最後要shift left half remainder 1 bit回來
```
remainder divisor
0000 0111 0110
0000 111 0
1010 111 0
0001 11 00
1011 11 00
0011 1 000
1101 1 000
0111 0000
0001 0000
0010 0001
0001 0001(shift left half remainder)
```
## 4
(20 points) Consider two decimal numbers: X = 0.3125 and Y = -15.96875.
(a) (10 points) Write down X and Y in the IEEE 754 single-precision format. You must detail how you get the answers, or you will receive 0 points.
(b) (5 points) Assuming X and Y are given in the IEEE 754 single precision format, show all the steps to perform X + Y and write the result in the IEEE 754 single precision format.
( c) (5 points) Assuming X and Y are given in the IEEE 754 single precision format, show all the steps to perform X × Y and write the result in the IEEE 754 single precision format.
### (a)
x = (-1)^s * (1+fraction) * 2^(exponent - bias)
1、先把x轉換為二進位
0.3125 * 2 = 0.625,整數部分為0
0.625 * 2 = 1.25,整數部分為1
0.25 * 2 = 0.5,整數部分為0
0.5 * 2 = 1,整數部分為1
所以二進位是0.0101
左移兩格為1.01 * $2^{-2}$
sign bit(1 bit) : 0
exponent(8 bits) : -2 + 127 = 125 = 01111101
fraction(23 bits) : 01 000000000000000000000
所以x = 0 01111101 01 000000000000000000000
2、先把y轉換為二進位
15 = 1111,左半邊是1111
0.96875 * 2 = 1.9375,整數部分為1
0.9375 * 2 = 1.875,整數部分為1
0.875 * 2 = 1.75,整數部分為1
0.75 * 2 = 1.5,整數部分為1
0.5 * 2 = 1,整數部分為1
所以二進位是-1111.11111
右移三格是-1.11111111 * $2^{3}$
sign bit(1 bit) : 1
exponent(8 bits) : 3 + 127 = 130 = 10000010
fraction(23 bits) : 11111111000000000000000
所以y = 1 10000010 11111111000000000000000
### (b)
x + y :
1.對齊bits
x = 1.01 * $2^{-2}$ = 0.0000101 * $2^{3}$
y = -1.11111111 * $2^{3}$
2.加法
```
-1.11111111 * $2^{3}$
+ 0.0000101 * $2^{3}$
-------------------------
-1.11110101 * $2^{3}$
```
x + y = -1.11110101 * $2^{3}$
sign bit(1 bit) : 1
exponent(8 bits) : 3 + 127 = 130 = 10000010
fraction(23 bits) : 11110101000000000000000
ans = 1 10000010 11110101000000000000000
### ( c)
x * y :
x = 1.01 * $2^{-2}$ = 0.0000101 * $2^{3}$
y = -1.11111111 * $2^{3}$
1.add exponent
-2 + 3 = 1
所以新的exponent是$2^{1}$
2.乘法
先忽略正負號和小數點
```
111111111
* 101
---------------
111111111
111111111
--------------------
100111111011
```
-(1.11111111) * 1.01 = -10.0111111011
3.整理
-10.0111111011 = -1.00111111011 * $2^{1}$
結果 = -1.00111111011 * $2^{1+1}$
結果 = -1.00111111011 * $2^{2}$
sign bit(1 bit) : 1
exponent(8 bits) : 2 + 127 = 129 = 10000001
fraction(23 bits) : 00111111011000000000000
ans = 1 10000001 00111111011000000000000
## 5
(20 points) Consider a new floating-point number representation that has only 8 bits containing the sign bit, exponent, and fraction from left to right. The leftmost bit is still the sign bit, the exponent is 3 bits wide and has a bias of 3, and the faction is 4 bits long. A hidden 1 to the left of the binary point is assumed. In this representation, any 8-bit binary pattern having 000 in the exponent field and a non-zero fraction indicates a denormalized number: (−1)Sign × (0 + Fraction) × 2-2. Write the answers of (a), (b), and (c ) in scientific notation, e.g., 1.0101 × 22.
(a) (3 points) What is the largest negative “normalized” number, denoted as a0?
(b) (6 points) What is the smallest negative “denormalized” number, denoted as
a1? What is the second smallest negative “denormalized” number, denoted as
a2?
(c ) (4 points) Find the differences between a0 and a1, and between a1 and a2.
Also, describe what you observe and any implications from them.
(d) (3 points) What decimal number does the Hexadecimal pattern 0x5C
represent?
(e) (4 points) Let U be the nearest representation of the decimal number -5.7; that
is, U has the smallest approximation error. What is the approximation error between U and -5.7? What is the actual decimal number represented by U?
### (a)
largest negative normalized number a0 :
sign bit : 1
exponent : 001 = 1 - 3 = -2
fraction : 0000
a0 = -1.0 * $2^{-2}$
### (b)
smallest negative denormalized number a1 :
sign bit : 1
exponent : 000 = 0 - 3 = -3
fraction : 1111
a1 = -0.1111 * $2^{-3}$
second smallest negative denormalized number a2 :
sign bit : 1
exponent : 000 = 0 - 3 = -3
fraction : 1110
a2 = -0.111 * $2^{-3}$
### (c )
difference between a0 and a1 :
a0 = -1.0 * $2^{-2}$
a1 = -0.1111 * $2^{-3}$
a0 - a1 = { (-10.0) - (-0.1111) } * $2^{-3}$
= -1.0001 * $2^{-3}$
difference between a1 and a2 :
a1 = -0.1111 * $2^{-3}$
a2 = -0.111 * $2^{-3}$
a1 - a2 = { (-0.1111) - (-0.111) } * $2^{-3}$
= -0.0001 * $2^{-3}$
observations and implications from them :
一、減完都變成denormalize格式
二、a0和a1其實相差蠻大的,而a1和a2其實蠻接近的
三、都是$2^{-3}$
### (d)
What decimal number does the Hexadecimal pattern 0x5C
represent :
0x5C = 0101 1100
sign bit : 0
exponent : 101 = 5 - 3 = 2
fraction : 1100
1.11 * $2^{2}$ = $111_2$ = $7_{10}$
### (e)
Let U be the nearest representation of the decimal number -5.7; that
is, U has the smallest approximation error. What is the approximation error between U and -5.7? What is the actual decimal number represented by U?
x = (-1)^s * (1+fraction) * 2^(exponent - bias)
先把-5.7處理成binary表示
左邊
5 = 101
右邊
0.7 * 2 = 1.4,整數部分為1
0.4 * 2 = 0.8,整數部分為0
0.8 * 2 = 1.6,整數部分為1
0.6 * 2 = 1.2,整數部分為1
0.2 * 2 = 0.4,整數部分為0
0.4 * 2 = 0.8,整數部分為0
0.8 * 2 = 1.6,整數部分為1
0.6 * 2 = 1.2,整數部分為1
0.2 * 2 = 0.4,整數部分為0
0.4 * 2 = 0.8,整數部分為0
0.8 * 2 = 1.6,整數部分為1
0.6 * 2 = 1.2,整數部分為1
...
所以
-5.7 = $-101.1\overline{0110}$
= $-1.011\overline{0110}$ * $2^2$
= -1.0111 * $2^2$ (round up)
sign bit : 1
exponent : 2 + 3 = 5 = 101
fraction : 0111
U = 1 101 0111
= -1.0111 * $2^2$
= $-101.11_{2}$ = $-5.75_{10}$
approximation error between U and -5.7 is $0.05_{10}$
and U's actual decimal number is $-5.75_{10}$
## 6
John說 greater_or_equal 會回傳1,if X >= Y。回傳0,if X < Y
假設X, Y不包含Nan,且0和-0被視為相同。
John說的是否正確?
ux : unsigned x
uy : unsigned y
sx : sign bit of x
sy : sign bit of y
(ux << 1 == 0 && uy << 1 == 0) : 確認x, y是否都為0或-0
(!sx && sy) : 只有當sx=0和sy=1時才return 1,也就是如果x是正數,y是負數,直接return 1。
(!sx && !sy && ux >= uy):當x和y都是正數時,且x>=y時return 1
(sx && sy && ux <= uy):當x和y都是負數時,且x<=y時return 1
錯誤點:(sx && sy && ux <= uy)
當x和y都是負數時,也要ux >= uy才能return 1。因為都是負數時,較大的數依然較大。
ex:
x = 111 = -1
y = 110 = -2
x = 011 = 3
y = 010 = 2
所以John說的是錯的