교육

[컴퓨터 시스템] 3일차

사람냄새나는 개발자 2019. 11. 12. 01:50

- 아래 내용은 '컴퓨터 시스템(3판)' 책을 바탕으로 몰랐던 내용이나, 알고 있더라도 머릿속에 좀 더 각인시키면 좋을 것 같은 내용 위주로 기록했다. 

- 자세한 정리보단, 핵심만 남기는 것을 선호하는 편이라 친절하지 않을 수 있다.

- 깊이 있는 학습을 원한다면 별도로 책(컴퓨터 시스템(3판))을 구입하여 학습하길 권한다.

- 스스로 언제든 틀릴 수 있다는 사실을 인식하고 있기 때문에, 피드백은 언제나 환영한다. 

- 목표는 기본기 튼튼한 프로그래머가 되기 위함이다.

 

 

 

2진수 표현


- 컴퓨터는 숫자를 저장할 때 기본적으로 2진수를 사용
- 하지만, 263.3 같이 2진수로 표현하지 못하는 실수가 존재함

     ex) 263 => 100000111
           0.3 => 0.01001100110011...... 무한 반복

- 이럴 경우, 컴퓨터에서는 표현할 수 있는 가장 근사치의 값을 저장함

- 이 근사치의 값을 저장하는 방법에는 두 가지가 있음 (고정 소수점 표현, 부동 소수점 표현)

 

컴퓨터가 실수를 표현하는 방식

고정 소수점 표현


- 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고 해당 비트만큼만 사용해서 숫자를 표현하는 방식
- 정수를 표현하는 비트 수를 늘리면 큰 숫자를 표현할 수 있지만 정밀한 숫자를 표현하지 못함

- 소수를 표현하는 비트 수를 늘리면 정밀한 숫자를 표현할 수는 있지만 큰 숫자를 표현하지 못함

- 이런 문제를 해결하기 위해 소수점을 고정하지 않는 부동 소수점(floating point)이 등장함

 

 

부동 소수점 표현


- 대부분의 시스템에서는 부동 소수점 방식으로 실수를 표현함

- 현재 사용되고 있는 부동 소수점 방식은 대부분 IEEE 754 표준을 따름 

 

 

ex) 263.3을 2진수 부동 소수점 표현 방식으로 변환

 

100000111.010011001100110...로 표현되던 것을 맨 앞의 1 바로 뒤로 소수점을 옮겨 다음과 같이 표현하도록 변환

1.00000111010011001100110... * 2^8(2의 8승)

- 부호는 노란색 부분에 기록 ex. 양수(0), 음수(1)

- 2^8의 8을 지수라고 하고 하늘색 부분에 기록 (IEEE 754 표현 방식에서는 127 + 지수를 기록)
- 소수점 이후 숫자열 전체를 가수
라고 하고 연두색 부분에 기록

 

이 방식에 따라서 263.3을 기록하면

부호 비트(1 bit) : 0 (양수)
지수 비트(8 bit) : 10000111 (127 + 8 = 135)
가수 비트(23 bit) : 00000111010011001100110

- 하지만, 이렇게 해도 0.010011001100110은 정확히 0.3을 나타낼 수 없음 (
10진수로 나타내 보면 0.29998779296875)

- (주의) 즉, 부동 소수점 방식에 의한 실수 표현은 항상 오차가 존재한다

- 컴퓨터에서 실수를 표현하는 방법은 정확한 표현이 아닌 언제나 근사치를 표현하는 것