Bias 표현법의 뜻과 사용 이유
그 이유는
+, - 같은 부호가 존재하는 (signed) 2의 보수법은 그 구조상, 비교를 하기에 어려움이 존재한다.
그래서 지수를 표현하는 부분에서 +, - 같은 부호가 없이 통일된 수로 (unsigned) 범위를 표현한다.
그리고 이러한 2의 보수법에서 부호가 없이 통일된 (unsigned) 수들로 만들기 위해 사용되는 것이
Bias 상수를 응용한 연산이고 이렇게 만들어진 체계를 Bias 표현이라 한다.
2의 보수법과 십진수의 비교 예
그렇다면 2의 보수법은 왜 비교가 힘들까란 의문이 생길 수 있어
간단히 예를 보이겠다.
2의 보수법은 음의 부호를 표현하기 위해
데이터의 비트 중 첫 번째 비트에 1을 주어 표현한다.
8비트의 메모리 환경에서 2의 보수법을 표현해 보겠다.
11111111 = -1 00000001 = +1
10000000 = -128 01111111 = +127
그리고 단순히 이 수들을 십진수로 만들어보자 비교해보자
2의 보수법 | 십진수 | |
01111111 | +127 | +127 |
00000001 | +1 | +1 |
11111111 | -1 | +255 |
10000000 | -128 | +128 |
위 표는 2의 보수법 상 내림차순으로 정렬하였다.
이 표만 봤을 때도 2의 보수상 내림차순 정렬이 된 것에 반해
십진수 상의 정렬은 혼란스러움을 알 수 있다.
그렇기에 수의 체계에서는 혼란을 느낄 수밖에 없고
컴퓨터 내의 처리장치에서는 어려움을 느낄 수밖에 없는 것이다.
2의 보수법 상의 괴리를 한 문장으로 표현하자면
양의 부호로 표현할 수 있는 가장 큰 수 01111111에 1을 더하였더니
값이 음의 부호로 표현할 수 있는 가장 작은 값이 되었다.
오히려 값이 작아진 셈이다.
이렇게 2의 보수법은 컴퓨터 내부 처리장치에서
값을 비교하는 데 있어 어려움이 존재한다.
그렇기에 데이터의 크기에 따라 알맞은 Bias 상수를 정하고
연산을 통해 Bias 표현법을 구현한다.
Bias 표현법 실제 사용 예
* 바이어스 상수 = 2^(n-1)-1 , n은 지수의 크기 (bit 단위)
8 bits 기준 ( 4 bytes float의 지수 표현 비트 크기)
= 2^(8-1)-1
= 127
11 bits 기준 ( 8 bytes double의 지수 표현 비트 크기)
= 2^(11-1)-1
= 1023
bias 상수 | |
8bits (float 지수bit) | 127 |
11bits (double 지수 bit) | 1023 |
** Bias 표현법 = 2의 보수법의 수 + 바이어스 상수
form)
i의 Bias (i는 유리수)
= i의 2의 보수법상 표기
+ 01111111(bias 상수 8 bits 기준 127)
= 합 결과(이진수)
십진수 변형 결과
-128의 Bias = 10000000 + 01111111 = 11111111 255 |
-2의 Bias = 11111110 + 01111111 = 01111101 125 |
2의 Bias = 0000010 + 0111111 = 1000001 129 |
-127의 Bias = 10000001 + 01111111 = 00000000 0 |
-1의 Bias = 11111111 + 01111111 = 01111110 126 |
126의 Bias = 01111110 + 0111111 = 11111101 253 |
-126의 Bias = 10000010 + 01111111 = 00000001 1 |
0의 Bias = 00000000 + 01111111 = 01111111 127 |
127의 Bias = 01111111 + 01111111 = 11111110 254 |
-3의 Bias = 11111101 + 0111111 = 01111100 124 |
1의 Bias = 0000001 + 0111111 = 1000000 128 |
정리표
-128 | -127 | -126 | . . . | -1 | 0 | +1 | . . . | +126 | +127 |
255 | 0 | 1 | 126 | 127 | 128 | 253 | 254 |
위가 2의 보수법 상의 수
아래가 Bias 표현으로 구한 수이다.
크게 볼 것은 2의 보수법 상 8비트에서 가장 작은 수인 -128이 가장 큰 수인 255로 표현되었고
-127부터는 가장 작은 수인 0에서부터 커져가는 규칙이 있었다.
여기서 의문을 가질 수 있다. 왜 -128부터 커지는 게 아니라 -127부터인 걸까?
왜 -128은 255라는 가장 큰 수로 표현되게 만든 걸까? Bias 상수를 잘못 정의한 거 아니야? 등
이와 관련해서 여러 글들을 찾아봤지만 정확한 답변을 찾기는 힘들었다.
그러나 필자의 생각엔 Bias 표현법 상에서 8 bits 기준 1111 1111, 즉 255는
무한한 값 INF나 NaN을 의미하도록 정의하였다. 그렇기에 255만큼은 저 규칙에
들어가지 않게 설계한 게 아닌가 생각한다.
이러니 저러니 해도
Bias의 목적은 역시
Bias 표현법을 통하여 음의 부호를 표현할 수 있는 2의 보수법의 장점을 챙기며
비교할 때의 어려움이란 단점을 보완한 것이다.
읽어봐 주셔서 감사합니다.
floating point (부동소수점)에 대한 더 많은 정보가 궁금하다면 아래 포스팅을 봐주세요.
https://unagi-zoso.tistory.com/2
** 틀린 부분이나 보완할 점이 있다면 부디 알려주시면 정말 감사할 것 같습니다! **
'CS > 컴퓨터 과학 얕은 지식' 카테고리의 다른 글
Base64란 무엇이고, 왜 쓰는 걸까 (뜻 과 사용 목적, 인코딩 예) (0) | 2022.05.26 |
---|---|
오버플로우와 언더플로우 (0) | 2022.05.24 |
메모리 패딩이 일어나는 이유 (뜻, 목적, Memory Alignment Rule, cache hit, false sharing) (0) | 2022.04.20 |
Heap 이란? (뜻, 목적, 사용 시 문제 (Memory leak, Memory Fragmentaion), 해결 방법) (0) | 2022.04.16 |
[부동 소수점 floating point] 이론 , 예 , bias 표현법 (0) | 2022.03.01 |
댓글