2016-04-07
부동 소수점 연산 Floating Point Arithmetic
(덧셈, 곱셈)
Rounding 모드
Round Up: +∞에 가까운 방향으로
Rownd Down: -∞에 가까운 방향으로
Towards Zero: 양수는 Down 음수는 Up
Round to Even: 가장 가까운 짝수로
Special Values (+∞, -∞, 0, NaN 등)
e가 00..00, 혹은 11...11. 십육진수로는 00, FF
e=00, f=0 일 때 0 (s에 따라 +0과 -0 두개 존재)
e=00, f!=0 일 때 맨 앞에 0이 붙어있다고 가정하고 즉 normalized 되지 않은 수들도 표현하게 해 줌
e=FF, f=0 일 때 s에 따라서 +∞, -∞
e=FF, f!=0 이면 NaN (Not a Number. 0.0/0.0의 결과)
Overflow - 허용 범위보다 큰 절대값 (즉 e=FF로 넘어감)
처리결과: 양수인 경우는 +∞, 음수인 경우는 -∞
Underflow - 가장 작은 normalized 절대값보다 작은 값
처리결과: denormalized (e=00, f!=0)
denormalized 수의 절대값을 (즉 f를) 점점 줄이면
자연스럽게 0이 된다 (e=00, f=0)
1.0 + (1.0/0.0) = 1.0 + ∞ = ∞
32bit만 되어도 손으로 종이에 쓰고 읽기가 머리아프므로
메릴랜드 대학 CS학과 강의노트에서 나오는 짧은 길이의 IEEE 754와 비슷한 부동 소수점 수 형식 예제로 설명
8비트로 구성 S : 1, E : 4, F : 3
1 1001 001 -1.001 x 2^(1001-0111) = -100.1 (십진수 -4.5)
1 1001 000 -1.000 x 2^(1001-0111) = -100.0 (십진수 -4.0)
e1 < e2 일 때 e1을 e2에 맞추고 그만큼 1.f1을 shift right
예를 들어 f1=101, e1=0110, f2=101, e2=1000 이라면
계산결과를 이렇게 다시 normalize 해줘야 할 경우도 있다
마지막으로 e를 보고 overflow/underflow 검사 등 처리
끝의 01
잘려나감
1.f1 x 1.f2 를 하고 exponent끼리는 덧셈 (bias임에 유의)
예를 들어 f1=101, e1=0110, f2=001, e2=1000 이라면
앞의 덧셈 예처럼 normalize 해줘야 할 경우도 있다
마지막으로 e를 보고 overflow/underflow 검사 등 처리