exponent : 지수부 (지수 부분)
matissa : 기수부 (분수 부분)
float형 실수의 전체 구조
IEEE 754 표준은 binary32에 대해 다음과 같이 명시한다.
부호 비트 : 1 비트
지수부 비트 : 8 비트
가수부 비트 : 정밀도는 24 비트 (실제로 메모리엔 23 비트로 표현)

부호부 1 비트는 실수값이 양수일 때 0, 음수일 때 1로 표현된다.
지수부 8 비트를 unsigned char로 봤을 때, 실제 값에서 127을 더한 값을 저장하며 저장된 값의 범위는 다음과 같다.
stored bits : 0 actual value : -127 (실제 지수값을 표현하는 것이 아닌 특정 의미가 있음)
stored bits : 1 actual value : -126
stored bits : 2 actual value : -125
…
stored bits : 126 actual value : -1
stored bits : 127 actual value : 0
stored bits : 128 actual value : 1
…
stored bits : 253 actual value : 126
stored bits : 254 actual value : 127
stored bits : 255 actual value : 128 (실제 지수값을 표현하는 것이 아닌 특정 의미가 있음)
위에서 보면 모든 비트가 0인 형태와 모든 비트가 1인 형태는 지수값을 나타내는 거이 아니라 특정 의미가 있는 비트이므로, 실제로 나타낼 수 있는 지수의 범위는 -126 ~ 127 이며, 이 값은 2 진수로 나타냈을 때의 지수의 값이다.
지수부의 비트가 모두 0인 경우와 모두 1인 경우가 갖는 의미

※ 비정상값(denormal numbers, subnormal numbers) : 0 이 아닌 수 중에서 표현 가능한 가장 작은 수보다 더 작은 수를 비정상값이라고 한다. 이 값이 나오는 경우는 결과값이 작을 때 정확도를 천천히 잃어버리는 계산을 허용하기 때문에 점진적인 언더플로우라고 불린다. 비정상값의 처리는 정상값에 비해 100 배 정도 계산이 느려지는 수도 있다고 하며, 코드상으로 비정상값을 0 으로 간주해서 이러한 현상을 방지할 수 있다고도 한다.
NaN(Not a Number) : 0/0 , ±∞/±∞ , 0 * ±∞ , ±∞ * 0 , ∞ + (−∞) , (−∞) + ∞ , 음수의 제곱근, 음수의 로그, -1 보다 작거나 1 보다 큰 수에 대한 사인과 코사인의 역함수, 정밀도를 벗어난 수, 복소수 등 수가 아닌 상태를 나타내는 것
가수부 표현
5.625(10)라는 십진수를 예를 들면, 소숫점 윗 부분은101(2)으로 변환된다.
이때 101(2)의 각 자릿값을 보면 22, 21, 20 이 된다. 십진수의 소숫점 윗 부분이 102, 101, 100 의 자릿값을 갖는 것과 마찬가지이다.
5.625(10)의 소숫점 아래의 자릿값을 보면, 10-1, 10-2, 10-3이 된다. 십진수로는 0.1, 0.01, 0.001 을 의미한다.
마찬가지로 2진수의 소숫점 아래의 자릿값은 2-1, 2-2, 2-3이 되고, 십진수로는 0.5, 0.25, 0.125 로 표현할 수 있다.
그럼 다시 0.625(10) 를 보면 0.5(10) + 0.125(10)로 나타낼 수 있으며 2-1, 2-3의 자릿값에 해당하므로 0.101(2)로 표현된다.
그러면 5.625(10)은 101.101(2)가 된다.
이 101.101(2) 를 가수부에 기록하는데 한 가지 과정을 더 거친다. 소숫점 윗쪽에 1 이 하나만 위치하도록 소숫점을 이동시킨다.
1.01101(2)
그리고 이 수가 실제의 수가 되기 위한 2 의 지수형태인 값을 곱한다.
1.01101(2) * 22
여기서 2 의 지수형태인 값의 지수부분이 8 비트의 지수부에 기록된다.
지수부에는 2 + 127 = 129 의 수가 기록되며 비트 표현으로는 1000 0001 이다.
그리고 소숫점 아래의 표현인 01101 부분을 23 비트의 가수부 표현에 기록하게 된다.
위에서 구한 부호부, 지수부, 가수부를 모두 기록하면 다음과 같다.
0100 0000 1011 0100 0000 0000 0000 0000
[출처] 실수형(float) 자료형의 메모리 구조, 실제로 변환해보기.|작성자 그냥
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
외판원 순회 (TSP) 알고리즘 개념 (0) | 2025.04.02 |
---|---|
float 자료형의 메모리 구조 (컴퓨터의 실수 표현) (0) | 2025.03.23 |
[C++] 조합 (Combination) 구할 수 있는 알고리즘 (0) | 2025.03.12 |
[C++] multimap 값 가져오기 (0) | 2025.03.03 |
논 블로킹 알고리즘 (Non-blocking Algorithms) (1) | 2025.02.16 |