컴퓨터아키텍처

Computer Architecture

2016-04-06


부동 소수점 수 Floating Point Number
 

과제 제출 안내

  • Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
  • [새로 만들기] 버튼을 눌러
    CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
    만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
    폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한)
  • Google 메일 계정만 있으면 Google Drive 서비스 이용 가능 
  • Google 메일 계정은 무료로 만들 수 있으며
    참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유

MIPS 어셈블리 실습

  • SPIM 시뮬레이터 사용
  • 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