컴퓨터아키텍처
Computer Architecture
2016-04-07
부동 소수점 연산 Floating Point Arithmetic
(덧셈, 곱셈)
과제 제출 안내
- Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
-
[새로 만들기] 버튼을 눌러
CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한) - Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
- Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유
MIPS 어셈블리 실습
- SPIM 시뮬레이터 사용
- 홈페이지에서 다운로드
http://spimsimulator.sourceforge.net/
- 홈페이지에서 다운로드
- MIPS 어셈블리 syntax coloring 지원하는텍스트 에디터
- Sublime Text
- Notepad++
- Vim
- Emacs
IEEE 754에서 Rounding 등
-
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, Underflow
-
Overflow - 허용 범위보다 큰 절대값 (즉 e=FF로 넘어감)
처리결과: 양수인 경우는 +∞, 음수인 경우는 -∞ -
Underflow - 가장 작은 normalized 절대값보다 작은 값
처리결과: denormalized (e=00, f!=0)-
denormalized 수의 절대값을 (즉 f를) 점점 줄이면
자연스럽게 0이 된다 (e=00, f=0)
-
Special Value 관련 연산
-
1.0 + (1.0/0.0) = 1.0 + ∞ = ∞
- 1.0 + (0.0/0.0) = 1.0 + NaN = NaN
- ∞ + ∞ = ∞, -∞ + -∞ = -∞, +∞ + -∞ = NaN
- 1.0 / ∞ = 0.0, 1.0 x ∞ = ∞, 0.0 x ∞ = NaN
- ∞ / 1.0 = ∞, ∞ / 0.0 = ∞, ∞ / ∞ = NaN
- +∞는 NaN과 +∞외 모든 부동소수점 수보다 크다
- -∞는 NaN과 -∞외 모든 부동소수점 수보다 작다
- 모든 부동소수점수 x에 대해 (x = NaN, +∞, -∞ 포함)
- NaN < x, NaN > x, NaN = x 는 항상 거짓
- NaN != x 는 항상 참
1 byte 부동 소수점 수
-
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)
F. P. 덧셈
-
e1 < e2 일 때 e1을 e2에 맞추고 그만큼 1.f1을 shift right
-
예를 들어 f1=101, e1=0110, f2=101, e2=1000 이라면
-
계산결과를 이렇게 다시 normalize 해줘야 할 경우도 있다
-
마지막으로 e를 보고 overflow/underflow 검사 등 처리
끝의 01
잘려나감
F. P. 곱셈
-
1.f1 x 1.f2 를 하고 exponent끼리는 덧셈 (bias임에 유의)
-
예를 들어 f1=101, e1=0110, f2=001, e2=1000 이라면
-
앞의 덧셈 예처럼 normalize 해줘야 할 경우도 있다
-
마지막으로 e를 보고 overflow/underflow 검사 등 처리
뺄셈과 따로 필요없다
- s를 뒤집어서 더하면 뺄셈
컴퓨터아키텍처
By 안기영 (Ahn, Ki Yung)
컴퓨터아키텍처
2016-04-07
- 1,597