Example:

IFFF Floating points는 exp의 값에 따라 위 세가지 종류로 나뉨.
Normalized
when exp != 000...0 && exp != 111...1
xx...x: frac field에 들어갈 bitExample
float f = 15213.0;
s = 0
E = 13, bias = 127(in single precision)
exp = E + bias = 13 + 127 = 140 = 10001100M = 1.1101101101101
frac = 11011011011010000000000Result: 0 10001100 11011011011010000000000
Denormalized
when exp = 000...0
case1: exp = 000...0, frac = 000...0
0을 표현. +0과 -0이 나타남.
cases2: exp = 000...0, frac != 000...0
0에 가까운 수. 매우 작은 소수
Special
when exp = 111...1case1: exp = 111...1, frac = 000...0
을 표현. overflow임. 음양 모두 가짐.
case2: exp = 111...1, frac != 000...0
NAN. 표현할 수 있는 수 값이 없음.

0에서 멀어질 수록 정밀도가 떨어짐
Rounding(근사) 필요
다양한 근사 모델
- Towards zero: 0에 가까운 방향으로 근사
- Round down: 음의 방향으로 근사
- Round up: 양의 방향으로 근사
- Nearest Even: 가까운 방향으로 근사
사이 값일 경우 가까운 짝수 방향으로 근사
우리는 Nearest Even 모델을 기본으로 설정함.
왜 이거 씀?
단순 올림이나 내림은 통계적으로 편향을 만들어 평균값이 실제보다 커지게 됨.
방식
가능한 두 값의 중간보다 클 경우 큰 값
가능한 두 값의 중간보다 작을 경우 작은 값
가능한 두 값의 중간일 경우 가까운 짝수
예) 10진수에서
7.8949999 7.89 (가능한 두 값의 중간보다 작음)
7.8950001 7.90 (가능한 두 값의 중간보다 큼)
7.8950000 7.90 (가능한 두 값의 중간, 가까운 짝수는 7.90임)
7.8850000 7.88 (가능한 두 값의 중간, 가까운 짝수는 7.88임)
예) 2진수에서
("Even" when lsb is 0
("Half way" when bits to right of rounding position = 100...0)
10.00011 10.00 (<1/2)
10.00110 10.01 (>1/2)
10.11100 11.00 (1/2)
10.10100 10.10 (1/2)
Rounding in floating point
- Guard bit(G): rounding한 결과의 lsb
- Round bit(R): rounding에 의해 버려질 bit의 msb
- Sticky bit(XXX): round bit 뒤의 모든 비트에 OR 연산 결과
Round up되는 경우
Round = 1, Sticky = 1 반올림
Guard = 1, Round = 1, Sticky = 0 가까운 짝수로예)
FP Multiplication
s = s1^s2
M = M1 * M2
E = E1 + E2*Fixing
M이 2 이상이 되면 우측 시프트 후 E 증가
E가 범위를 벗어나면 overflow
frac precision에 맞게 M 라운딩예)
s = 0^0 = 0
M = 1.010 * 1.110 = 10.0011
E = 2 + 3 = 5shift M right 1:
10.0011 1.00011, E = E+1
round M to fit frac:
1.00011 1.001result:
FP Addition
s, M = 정렬 후 sign addition 결과
E = 더 큰 거(E1)*Fixing
M이 2 이상이 되면 우측 시프트 후 E 증가
M이 1보다 작으면 좌측 시프트 후 E 감소
E가 범위를 벗어나면 overflow
frac precision에 맞게 M 라운딩예)
덧셈 연산을 위해 align:
덧셈:
shift M right 1:
10.0110 1.00110, E = E+1
round M to fit frac:
1.00110 1.010result:
<참고자료>
Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspective, Third Edition
안성용, "시스템소프트웨어", 부산대학교