[컴퓨터시스템구조] 17. 부동 소수점

2023. 10. 15. 23:54·컴퓨터시스템구조
목차
  1. 부동 소수점(Floating Point)
  2. 부동 소수점 표준
  3. IEEE 부동 소수점 형식
  4. Single-Precision 범위
  5. Double-Precision 범위
  6. 부동 소수점 정밀도
  7. 부동 소수점 예시 1
  8. 10진수 → 2진수
  9. 부동 소수점 예시 2
  10. 2진수 → 10진수
  11. 비정규 숫자
  12. 무한대와 NaN
  13. 부동 소수점 덧셈
  14. 부동 소수점 덧셈 2진수 예제
  15. 부동소수점 가산기 하드웨어
  16. 부동 소수점 곱셈
  17. 부동 소수점 곱셈 2진수 예제
  18. 부동소수점 산술 하드웨어

부동 소수점(Floating Point)

  • 정수가 아닌 표현
    • 매우 작은 숫자와 매우 큰 숫자
  • 과학적 표기법과 유사
    • 2.34 * 10^56
    • +0.002 * 10^–4
    • +987.02 * 10^9
  • 2진법
    • ±1.xxxxxxx_2 * 2^yyyy
  • C의 float 및 double 유형

 


 

부동 소수점 표준

  • IEEE Std 754-1985에 정의
  • 표현의 다양화에 대응하여 개발됨
    • 과학 코드의 이식성 문제
  • 이제 거의 보편적으로 채택
  • 두 가지 표현
    • Single precision (32비트)
    • Double precision (64비트)

 

 


 

IEEE 부동 소수점 형식

  Sign Exponent(지수) Fraction(가수)
single : 32비트 1비트 8비트 23비트
duoble : 64비트 1비트 11비트 52비트

 

X = (-1)^S * (1+Fraction) * 2^(Exponent - Bias)

 

  • S: sign bit, 부호 비트
    • 0 : 음수가 아님
    • 1 : 음수
  • 유효함수 정규화 : 1.0 ≤ |유효함수| < 2.0
    • 정규화 이후 소수점 앞의 수는 1
    • 예) 1010.1101 → 1.0101101 * 2^3
  • Fraction(가수) : 정규화 이후 1.xxxx...x일때
    • xxxx...x 부분
    • 뒤는 0으로 채움
    • 예) 1.0101101의 Fraction : 0101101
  • Exponent(지수) : 실제 지수 - (Bias)편향
    • 지수가 부호가 없는지 확인
    • single: bias = 127
    • double: bias = 1023

 


 

Single-Precision 범위

  • 지수 : 00000000 ~ 11111111 (8비트)
  • 가장 작은 값
    • Fraction : 000...00 → significand = 1.0
    • 지수 : 00000001
    • 실제 지수 = 1 - 127 = -126
    • ± 1.0 * 2^-126 ≈ ± 1.2 * 10^-38
  • 가장 큰값
    • Fraction : 111...11 → signficand ≈ 2.0
    • 지수 : 11111110
    • 실제 지수 = 254 - 127 = +127
    • ± 2.0 * 2^+127 ≈ ± 3.4 * 10^+38

 

Double-Precision 범위

  • 지수 : 00000000000 ~ 11111111111 (11비트)
  • 가장 작은 값
    • Fraction : 000…00 → significand = 1.0
    • 지수 : 00000000001
    • 실제 지수 = 1 - 1023 = -1022
    • ± 1.0 * 2^-1022 ≈ ± 2.2 * 10^-308
  • 가장 큰값
    • Fraction : 111…11 → significand ≈ 2.0
    • 지수 : 11111111110
    • 실제 지수 = 2046 - 1023 = +1023
    • ± 2.0 * 2^+1023 ≈ ± 1.8 * 10^+308

 


 

부동 소수점 정밀도

  • 상대 정밀도
  • 모든 소수 비트는 중요합니다.
    • single : 약 2^-23
      • 23 * log_10 2 ≒ 23 * 0.3 ≒ 소수점 이하 6자리 정밀도
    • double : 약 2^-52
      • 52 * log_10 2 ≒ 52 * 0.3 ≒ 소수점 이하 16자리 정밀도

 


 

부동 소수점 예시 1

10진수 → 2진수

  • 예) -0.75
-0.75
= (-1)^1 * 0.11_2
= (-1)^1 * 1.1_2 * 2^-1

 

  • S = 1
  • 1.Fraction = 1.1
    • 1000…00_2
  • Exponent - Bias = -1
    • Exponent = -1 + Bias
    • Single: -1 + 127 = 126 = 01111110_2
    • Double: -1 + 1023 = 1022 = 01111111110_2

 

  • Single: 1 01111110 1000…00
  • Double: 1 01111111110 1000…00

 


 

부동 소수점 예시 2

2진수 → 10진수

  • 예) single precision : 1 10000001 01000…00
S Exponent Fraction
1 10000001 01000…00

 

  • 지수 : 10000001_2 = 129
x = (-1)^1 * 1.01_2 * 2^(129-127)
= -1.01_2 * 2^(2)
= -101_2
= -5.0

 


 

비정규 숫자

  • 지수 = 000...0 → 숨겨진 비트는 0
x = (-1)^S * (0+Fraction) * 2^(-Bias)
single : (-1)^S * (0+Fraction) * 2^(-127)
double : (-1)^S * (0+Fraction) * 2^(-1023)
  • 일반 숫자보다 작음
    • 정밀도가 감소하면서 점진적인 언더플로우를 허용한다.

 

  • Fraction = 000...0
x = (-1)^S * (0+0) * 2^(-Bias) = ± 0.0

 


 

무한대와 NaN

  • 지수 = 111...1, Fraction = 000...0
    • ±무한대
    • 후속 계산에 사용할 수 있어 오버플로 검사가 필요하지 않다.
  • 지수 = 111...1, Fraction ≠ 000...0
    • 숫자 없음(NaN)
    • 정의되지 않은 결과를 나타낸다.
    • 예: 0.0 / 0.0
    • 후속 계산에 사용할 수 있다.

 


 

부동 소수점 덧셈

9.999 * 10^1 + 1.610 * 10^-1

 

  • 1. 소수점 정렬
    • 큰 지수에 맞춘다.
9.999 * 10^1 + 0.016 * 10^1

 

  • 2. 유효 숫자를 더한다.
9.999 * 10^1 + 0.016 * 10^1 = 10.015 * 10^1

 

  • 3. 결과 정규화, 오버플로우/언더플로우 확인
1.0015 * 10^2

 

  • 4. 필요한 경우 반올림하고 다시 정규화한다.
1.002 * 10^2

 

부동 소수점 덧셈 2진수 예제

1.000_2 * 2^-1 + -1.110_2 * 2^-2
  • (0.5 + -0.4375)

 

  • 1. 소수점 정렬
    • 큰 지수에 맞춘다.
1.000_2 * 2^-1 + -0.111_2 * 2^-1

 

  • 2. 유효 숫자를 더한다.
1.000_2 * 2^-1 + -0.111_2 * 2^-1 = 0.001_2 * 2^-1

 

  • 3. 결과 정규화, 오버플로우/언더플로우 확인
1.000_2 * 2^-4
  • 오버/언더플로우 없음

 

  • 4. 필요한 경우 반올림하고 다시 정규화한다.
1.000_2 * 2^-4
  • 변화 없음
  • 0.0625

 


 

부동소수점 가산기 하드웨어

  • 정수 가산기보다 훨씬 더 복잡하다.
  • 한 클럭 주기로 수행하면 시간이 너무 오래 걸린다.
    • 정수 연산보다 훨씬 길다
    • 시계가 느려지면 모든 명령에 불이익이 발생한다.
  • 부동소수 가산기는 일반적으로 여러 사이클이 소요된다.
    • 파이프라인 가능

 


 

부동 소수점 곱셈

1.110 * 10^10 * 9.200 * 10^-5

 

  • 1. 지수 더하기
    • 편향된(Biased) 지수의 경우 합계에서 편향을 뺀다.
새 지수 = 10 + -5 = 5

 

  • 2. 유효숫자 곱하기
1.110 * 9.200 = 10.212
10.212 * 10^5

 

  • 3. 결과 정규화, 오버플로우/언더플로우 확인
1.0212 * 10^6

 

  • 4. 필요한 경우 반올림하고 다시 정규화한다.
1.021 * 10^6

 

  • 5. 피연산자의 부호로부터 결과의 부호를 결정한다.
+1.021 * 10^6

 

부동 소수점 곱셈 2진수 예제

1.000_2 * 2^(-1) × -1.110_2 * 2^(-2) 
  • (0.5 * -0.4375)

 

  • 1. 지수 추가
Unbiased : -1 + -2 = -3
Biased : -1 + -2 + 127 = 124

 

  • 2. 유효숫자 곱하기
1.000_2 * 1.110_2 = 1.110_2
1.110_2 * 2^-3

 

  • 3. 결과 정규화 및 오버플로우/언더플로우 확인
1.110_2 * 2^–3
  • (변화 없음), 오버/언더플로우 없음

 

  • 4. 필요한 경우 반올림하고 다시 정규화한다.
1.110_2 * 2^–3
  • (변화 없음)

 

  • 5. 부호 결정
-1.110_2 * 2^-3 = -0.21875

 


 

부동소수점 산술 하드웨어

  • 부동소수점 multiplier는 부동소수점 가산기와 비슷하다.
    • 그러나 가산기 대신 유효숫자에 multiplier를 사용한다.
  • 부동소수점 산술 하드웨어는 일반적으로
    • 덧셈, 뺄셈, 곱셈, 나눗셈, 역수, 제곱근
    • 부동소수점 ↔ 정수 변환
  • 작업에는 일반적으로 여러 주기가 소요된다.
    • 파이프라인 가능
저작자표시 변경금지 (새창열림)

'컴퓨터시스템구조' 카테고리의 다른 글

[컴퓨터시스템구조] 19. 프로세서(논리 설계, 조합 요소, 논리 요소)  (0) 2023.11.06
[컴퓨터시스템구조] 18. MIPS 부동 소수점 연산자  (1) 2023.10.19
[컴퓨터시스템구조] 16. 컴퓨터 산술(mult, mfhi, mflo, mul, div)  (0) 2023.10.15
[컴퓨터시스템구조] 15. MIPS 배열 vs. 포인터  (0) 2023.10.15
[컴퓨터시스템구조] 14. MIPS Sort  (1) 2023.10.15
  1. 부동 소수점(Floating Point)
  2. 부동 소수점 표준
  3. IEEE 부동 소수점 형식
  4. Single-Precision 범위
  5. Double-Precision 범위
  6. 부동 소수점 정밀도
  7. 부동 소수점 예시 1
  8. 10진수 → 2진수
  9. 부동 소수점 예시 2
  10. 2진수 → 10진수
  11. 비정규 숫자
  12. 무한대와 NaN
  13. 부동 소수점 덧셈
  14. 부동 소수점 덧셈 2진수 예제
  15. 부동소수점 가산기 하드웨어
  16. 부동 소수점 곱셈
  17. 부동 소수점 곱셈 2진수 예제
  18. 부동소수점 산술 하드웨어
'컴퓨터시스템구조' 카테고리의 다른 글
  • [컴퓨터시스템구조] 19. 프로세서(논리 설계, 조합 요소, 논리 요소)
  • [컴퓨터시스템구조] 18. MIPS 부동 소수점 연산자
  • [컴퓨터시스템구조] 16. 컴퓨터 산술(mult, mfhi, mflo, mul, div)
  • [컴퓨터시스템구조] 15. MIPS 배열 vs. 포인터
파스텔코랄
파스텔코랄
Developer Blog 📜 Lots of rules and no mercy ✨
파스텔코랄
슬기로운 개발일지
파스텔코랄
전체
오늘
어제
  • 스터디
    • 컴퓨터시스템구조
    • 모바일프로그래밍
    • 프로그래밍언어론
    • 운영체제
    • 컴퓨터네트워크
    • 데이터분석
    • 소프트웨어공학
    • 시스템프로그래밍

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • About

링크

공지사항

인기 글

태그

네트워크
운영체제
어셈블리어
프로그래밍언어론

최근 댓글

최근 글

hELLO· Designed By정상우.v4.6.1
파스텔코랄
[컴퓨터시스템구조] 17. 부동 소수점
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.