부동 소수점 이란?
- 부동 소수점은 실수(소수점이 있는 숫자)를 표현 및 연산 하기 위해서 사용하는 실수를 표현하는 방식이다.
- 부동 소수점을 사용하면 상당히 폭넓은 숫자를 표현할 수 있다.
- 부동 소수점은 IEEE 754* 표준에 따라 숫자를 가수, 지수, 부호로 나누어 저장한다.
- 부동 소수점 이외에도 고정 소수점과 같은 표현 방식도 있다.
IEEE 754란? : 전기전자공학자협회(Institute of Electrical and Electronics Engineers, IEEE)라는 전기전자공학 전문가들의 국제조직에서 지정한 부동 소수점 관련 표준 포맷을 뜻한다.
부동 소수점의 구성 요소
부동 소수점은 크게 부호(Sign), 지수(Exponent), 그리고 가수(Mantissa)로 구성된다.
1. 부호 (Sign)
- 1비트로 구성되며 숫자의 양수와 음수를 결정한다.
- 0: 양수
- 1: 음수
ex : 숫자 -10.5의 부호는 1로 저장되며, 10.5의 부호는 0으로 저장된다.
2. 지수 (Exponent)
- 지수는 숫자의 크기를 결정하며, 2의 거듭제곱 형태로 표현한다.
- 오프셋 바이너리(offset binary)**라는 인코딩 방식을 사용하여 지수를 저장한다.
- Bias 값:
- 32비트(float): 127
- 64비트(double): 1023
- Bias 값:
오프셋 바이너리란? : 오프셋 바이너리 방식(Offset Binary)은 숫자를 표현할 때, 음수를 포함하는 값을 비트로 나타내기 위해 사용하는 방식 중 하나이며. 음수와 양수를 동일한 비트 길이 안에서 효율적으로 저장하는 방식이다.
지수에서 Bias 값을 사용해야 하는 이유
- 지수는 양수와 음수를 모두 표현해야 한다.
- 하지만 이진수(Binary)는 기본적으로 0 이상의 값(양수)만 표현할 수 있다.
- 이를 해결하기 위해 지수값(음수 포함)을 모두 양수로 변환하여 저장하는 방식이 필요한데 이때 사용되는 것이 Bias 값이다.
Bias 값은 고정된 상수로, 지수 표현에서 음수와 양수를 포함할 수 있도록 실제 지수 값에 더해지는 값이다.
즉 컴퓨터가 저장하는 값은 (실제 지수 값 + Bias)로 변환된다.
따라서
"저장되는 지수 값" = "실제 지수 값" + "Bias 값"이 되며
"실제 지수 값" 을 복구할 때 에는 "저장된 값" − "Bias 값" 을 해주면 된다.
즉 10.5 = 1.01012 × 23 에서 지수 값은 3이다. (계산 방식은 가수 파트 참조)
Ex 1) 실제 지수 값이 3일 때
- 실제 지수 값: E = 3
- Bias 값: 127(float 기준)
- 저장된 지수 값: 3 + 127 = 130
Ex 2) 실제 지수 값이 -4일 때
- 실제 지수 값: E = −4
- Bias 값: 127
- 저장된 지수 값: −4 + 127 = 123
3. 가수 (Mantissa)
- 가수는 정규화된 숫자의 소수점 이하 부분이다.
- 부동소수점에서는 정규화된 수의 첫 번째 1을 생략하고, 그 뒤의 값을 가수로 저장한다.
- 즉 가수는 1.M의 형태에서 1을 제외한 나머지 부분을 뜻한다.
ex : 숫자 10.5를 부동소수점으로 표현하는 경우에는
10.5 를 이진수로 변환하면 10과 0.5를 각각 이진수로 변경해야 한다.
10을 이진수로 변환하는 경우
- 10÷2=5 (나머지 0)
- 5÷2=2 (나머지 1)
- 2÷2=1 (나머지 0)
- 1÷2=0 (나머지 1)
즉 1010 = 10102
0.5을 이진수로 변환하는 경우
0.5 × 2= 1.0
즉 0.510 = 0.12
둘을 합친다면
10.510 = 1010.12
부동소수점에서 숫자는 정규화된 형태로 저장한다.
정규화한 숫자는 항상 1.XXX 형태로 저장하기 때문에 1010.12 값은 소수점 왼쪽으로 세번 이동시킨다.
따라서 다음과 같이 값이 저장된다.
10.5 = 1.01012 × 23
여기서 지수 부분은 3이고
가수 부분은 "1.0101"에서 1을 제외하고 0101만 저장한다.
또한 IEEE 754 32비트 부동소수점 형식에서는 가수를 23비트로 저장하기 때문에, 나머지 자리는 0으로 채워진다.
따라서, 10.5의 가수는 01010000000000000000000이 된다.
마지막으로 10.5를 IEEE 754 32비트 부동소수점 형식으로 표현하자면
- 부호 비트 (S): 10.5는 양수이므로 부호 비트는 0이다.
- 지수 (E): 지수는 3이지만, Bias를 더해서 130을 저장합니다. 130은 이진수로 10000010₂입니다.
- 가수 (M): 가수는 정규화된 수에서 1을 제외한 부분인 0101을 23비트로 확장하여 01010000000000000000000으로 저장합니다.
따라서 10.5는 0(부호) 10000010(지수) 01010000000000000000000(가수) 로 저장된다.
사진 출처 :
https://steemit.com/kr/@modolee/floating-point
https://modulabs.co.kr/blog/fixed-points-and-floating-points-how-computers-understand-numbers
'CS(Computer Science)' 카테고리의 다른 글
메모리 정렬과 패딩 (0) | 2024.12.05 |
---|---|
객체 지향 프로그래밍(OOP)이란? (1) | 2024.11.25 |