3.2 Additon and Subtration
Overflow
같은 부호의 덧셈에서 오버플로우가 일어날 수 있다.

멀티미디어에서는 오버플로우가 일어나도 표현할 수 있는 최댓값이나 최솟값으로 표현된다.
3.3 Multiplication

Optimized Multiplier
병렬(parallel)로 단계를 수행한다: add/shift

Faster Multiplier
결과를 빨리 얻을 수 있지만(성능은 높지만), 하드웨어를 많이 사용하므로 비용이 많이 든다.

RISC_V multiplication
- mul
곱의 하위 32비트를 가진다.
- mulh
곱의 상위 32비트를 가진다. 부호있는 수를 계산한다.
- mulhu
곱의 상위 32비트를 가진다. 부호없는 수를 계산한다.
- mulhus
곱의 상위 32비트를 가진다. 부호있는 수와 부호없는 수를 계산한다.
3.4 Division

Optimized Division
partial-remainder에 뺄 때마다 하나의 싸이클이 진행된다.

Faster Division
- multiplier처럼 병렬적(parallel)인 하드웨어를 사용할 수 없다.
- 나눗셈에서는 remainder에 divisor를 뺀(subtraction) 결과가 음수인지 아닌지에 따라 다르게 동작하므로 여러 개의 하드웨어가 병렬적으로 처리할 수 없다.
RISC_V multiplication
3.5 Floating Point
- 정수가 아닌 수(실수)를 표현한다.
- 아주 작은 수(0.000...)나 아주 큰 수를 포함한다.
- scientific notation
정수부가 일의 자리인 표현을 정규화된(normalized) 표현,
아니면 not normalized scientific notation.
-2.34 10^56 (normalized) = -2.34e56
0.002 10^(-4) (not normalized) = 2.0e-7
987.02 * 10^9 (not normalized) = 9.8702e11

-
S: sign bit. 부호 비트. (양수는 0, 음수는 0)
-
정규화된 significand: 이진법이므로, 1.0 ≤|significand|<2.0
significand는 fraction에 숨겨진 "1."을 앞에 합치면 된다.
-
exponent: 초과 표현(실제 exponent + bias).
exponent 비트는 unsigned 표현이다.
IEEE 754에서, single-precision의 bias는 127이고, double-precision의 bias는 1023.
Floating Point Percision
Relative precision(상대적인 정확도)
- single: fraction이 23비트. 2^(-23)의 정확도. 10진법 기준 소숫점 6자리까지.
- double: fraction이 52비트. 2^(-52)의 정확도. 10진법 기준 소숫점 16자리까지.
Floating Point Numbers

Floating Point 덧셈
- 소수점 정렬한다.
- significand끼리 더한다.
- 결과를 정규화하고, 오버플로우/언더플로우 하지 않았는지 검사한다.
- 필요하다면 반올림한다.
Floating Point Adder Hardware
정수 가산기보다 훨씬 복잡하다.

Floating Point 곱셈
- exponent끼리 더한다.
- significand끼리 곱한다.
- 결과를 정규화하고, 오버플로우/언더플로우 하지 않았는지 검사한다.
- 필요하다면 반올림한다.
- 피연산자들의 부호로부터, 결과 부호를 결정한다.
Floating Point Arithmetic Hardware
-
Floating Point multiplier의 복잡도는 Floating Point adder와 비슷하다.
하지만 adder에서는 significand끼리 더했지만, multiplier는 곱한다.
-
Floating Point operation은 일반적으로 여러 번의 cycle로 동작한다.
pipeline화 될 수 있다.
FP Instructions
Floating point용의 레지스터가 따로 있다.(f0 ~ f31)
Load and Store
Single-precision Arithmetic
fadd.s, fsub.s fmul.s, fdiv.s, fsqrt.s
Double-precision Arithmetic
fadd.d, fsub.d fmul.d, fdiv.d, fsqrt.d
Single- and Double-precision Comparison
- feq.s, flt.s, fle.s
- feq.d, flt.d, fle.d
- 연산결과로 나온 0이나 1로 다시 브랜치 명령을 써서 이동해야 한다.
Rounding
Always round up
Always round down
Round to nearest even
- 0.5일 때만 짝수로 반올림한다.
- 가장 많이 쓰인다.
1.001100 : round up(nearest even) to 1.010
1.000100 : round down(nearest even) to 1.000