CS/Computer Architecture

[컴퓨터구조] 3-2. Floating-Point Representation

F12:) 2023. 9. 13. 09:03

Floating-Point Representation, 부동 소수좀 표현에 대해서 알아보자. 교수님이 중요하게 다루지는 않았지만, 수업을 진행했던 내용이므로 정리해본다.

 

 

 

부동 소수점 표현

만약 우리가 엄청 작은 수의 단위나 엄청 큰 수는 어떻게 표시할까?? 만약 20억 혹은 그것보다 더 큰 수를 계산하기 위해서 그에 맞는 2진수의 자리수만큼 비트를 사용하기에는 너무 자원이 낭비된다. 따라서 컴퓨터는 이러한 수들을 보다 효율적으로 저장하기 위해 고안되었다.

 

부동 소수점을 표시하기 위해서는 총 3개의 부분이 존재한다. sign, mantisa, exponent. 우리는 이 세가지를 예로 들어 설명하겠다. 편의를 위해 작은 수로 진행하는 점 양해 부탁한다.

 

우리가 -24.25라는 수를 부동 소수점 표현 방식으로 사용한다고 해보자.

 

sign = 1

 

부호를 나타내는 sign은 32비트 컴퓨터 기준으로 1비트가 부여된다. 따라서 (-1)^s로 부호를 표현한다. 따라서 s가 0일 때는 양수 부호를 의미하고, s=1일 때는 음수임을 의미한다.

 

 

exponent = 1000 0011

 

지수 부분에는 총 8비트가 할당된다. 우리는 이 지수부분을 이해하기 위해 우선 24.25라는 수를 이진수로 표현해봐야한다.

24 : 11000

0.25 : 0.01

 

따라서 24.25는 11000 01 이 될 것이다.

여기서 우리는 Normalized되게 이용한다. normalized란, 소수점 앞의 수가 0이 아닌 한자리 수여야만하는 것을 의미한다.

 

따라서 11000.01 은 1.1000 01 * 2^4가 된다. 

2^4에서 4는 right shift의 횟수를 의미한다. left shift를 하게되면 -1, -2 ... 이런 식으로 작아진다.

 

여기서 exponent는 말그대로 지수에 곱해진 수에 집중한다. 원래는 4이기 때문에 0000 0100 이겠지만, 여기서는 특정 수인 127을 더해준다. 이 부분을 자세히 이해하고 싶다면, 부동소수점 biased notation을 찾아보자. IEEE 754 표현방식이다.

 

127을 더해주기 때문에 4 + 127 = 131이므로 1000 0011이 된다. 

 

 

mantisa = 1000 0010 0000 0000 0000 0000

 

방금 위에서 우리는 24.25를 1.1000 01 * 2^4로 나타내었다. 여기서 정수부를 제외한 실수부를 mantisa라고 하자. 따라서 1000 01이 된다. 하지만 mantisa는 총 23비트를 할당받는다. 따라서 뒷 부분을 0으로 채운 100 0010 0000 0000 0000 0000 가 된다.

 

위 설명을 이 그림으로 나타내면 구조가 쉽게 보인다.

 

 

 

종합해보면 우리는 -24.25를 1100 0001 1100 0001 0000 0000 0000 0000 으로 표시할 수 있다. 현재는 작은 수를 표현하므로, 이 방법이 무슨 의미가 있나 싶지만, 소수점이 길어지고 수가 급격히 커질 때 매우 유용하게 사용될 수 있다.