컴퓨터아키텍처
Computer Architecture
2016-04-06
부동 소수점 수 Floating Point Number
과제 제출 안내
- 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 표준
-
Sign, Exponent, Fraction (Mantissa)
-
Single precision (32bit -- s: 1, e: 8, f: 23)
-
Double precision (64bit -- s: 1, e: 11, f: 52)
-
기타 extended precision 포맷들도 있다
-
-
s(sign bit)가 0이면 양수 1이면 음수
-
f는 맨 앞에 1이 붙어있다고 가정하고 2진수 소수점 부분만
예) s=1, f=0101...0101 이면 -1.0101...0101 x 2^e 를 나타냄 -
f는 2의 보수가 아닌 signed magnitude 방식
-
e가 나타내는 값은 (e의 unsinged 값) - 011...11
즉 기본적으로 unsinged 표기이되 중간정도 값을 0으로
(그래서 bias 라고도 부름)
1 byte 부동 소수점 수
-
32bit만 되어도 손으로 종이에 쓰고 읽기가 머리아프므로
메릴랜드 대학 CS학과 강의노트에서 나오는 짧은 길이의 IEEE 754와 비슷한 부동 소수점 수 형식 예제로 설명 -
8비트로 구성 S: 1, E: 4, F: 3
-
11001001 -1.001 x 2^(1001-0111) = -100.1 (십진수 -4.5)
-
11001000 -1.000 x 2^(1001-0111) = -100.0 (십진수 -4.0)
-
그런데 반대로 4.25를 1byte 부동소수점수로 나타내려면?
-
이진수로 100.01 = 1.0001 x 2^(1001-0111)
-
fraction의 길이가 3으로 제한되어 있어 0001 표현 불가
버림으로 000 아니면 올림으로 001? 이것이 Rounding
-
Rounding 관련 오차
-
부동소수점 수는 넓은 범위 수 표현 장점
-
32bit 정수(fixed point 2의 보수)는 -2^31 ~ 2^31-1
-
single precision 부동소수점수는 대략 -2^128 ~ 2^128
-
-
문제는 fraction(mantissa) 길이의 정확도로만 표현가능
-
십진수 표현 소수점 수를 옮길 때 오차 발생 가능
-
정수의 경우도 많은 자리수 정수를 변환하면 오차 발생
-
-
이런 오차가 제대로 관리되지 않아서 실제 큰 사고도 발생.
대표적으로 1991 걸프전 미국의 패트리어트 미사일 오작동 이라크 스커드 미사일 격추에 실패로 28명의 미국인 사망.
매 0.10초 카운터 변수++해서 시간=카운터*0.10 으로 코딩.
시스템 가동 100시간 후에는 0.34초 오차 누적, 격추 위치 계산은 무려 500m발생 (SIAM News, 25(4):11, July 1992)
출처: http://howardhuang.us/teaching/cs232/10-MIPS-floating-point-arithmetic.pdf
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의 결과)
-
컴퓨터아키텍처
By 안기영 (Ahn, Ki Yung)
컴퓨터아키텍처
2016-04-06
- 1,887