오늘 배운 내용
- 기술 면접 준비 - float와 int의 표현 가능한 범위가 다른 이유는?
기술 면접 준비 - float와 int의 표현 가능한 범위가 다른 이유는?
float와 int와 다른이유라는 문제를 보니 정확한 이유를 설명하지 못하겠다라는 느낌을 받았다.
당연하게 float는 실수, int는 정수를 나타내지만 정확히 어떻게? 왜? 어떤구조로?
float는 실수, int는 정수를 나타낼 수 있는가? 에 대한 생각은 해보지 않은 것 같다.
</br>
결론적으로, float와 int가 표현 가능한 범위가 다른 이유는 비트를 다른 구조로 활용해서 수를 표현하기 떄문이다.
int는 1비트로는 부호, 나머지 31비트를 활용하여 수를 표현한다.
float는 1비트로는 부호, 나머지 31비트는 지수,가수부로 나누어 8비트의 지수부, 23비트의 가수부를 활용해 수를 표현한다.
이 8비트의 지수부는 0 ~ 255의 값을 가질수 있고, 바이어스 표현으로 -127을 뺀 -127 ~ 128까지의 범위를 가진다.
바이어스 표현 지수부의 값을 양수로 통일하여 저장
23비트의 가수부는 소수점 아래의 수의 값을 나타내는데. 이때 가수부는 2의 음의 거듭제곱으로 표현된다.
</br>
여기서 이해가 안되는 부분이 있었다. float는 이미 부호비트로 1비트를 사용한다 그런데.
8비트의 지수부에서 바이어스 표현으로 0 ~ 255를 -127 ~ 128까지의 범위를 사용한다.
왜 0 ~ 255가 아니라 -127 ~128 범위를 사용해서 음수, 양수 범위를 나누는 것인지 이해가 안됬다.
</br>
찾아보니 이해가 안되는게 당연했는데 -127 ~ 128은 음수, 양수가 나뉘는게 아니였기 때문이였다.
일단 float의 값이 어떻게 결정되냐면 float 값= (−1)^부호비트 ×(1+가수부 값)×2^(지수부 값 - 바이어스)
결론적으로 지수부는 가수부로 표현한 값을 밀어주는 역할을 한다.
가수부가 얼마나 큰지 얼마나 작은지 소수점 자리를 이동시킨다.