float와 int의 표현 가능한 수의 범위가 다른 이유는 무엇인가요?
float과 int형이 4바이트로 같은 메모리를 할당받는데도 float형에서 더 다양한 수를 표현 할 수 있는 이유는
float형이 int형과 다르게 부동소수점이라는 개념을 사용해서 소수점의 위치를 고정해두지 않고 지수부를 이용해
소수점의 위치를 조절하는 방식을 이용하기 때문에 데이터를 인코딩하고
해석하는 방식에 차이가있어서 표현 할 수 있는 수의 범위에 차이가 생깁니다.
ex) -9.6875[실수표현] → -1001.1011(2)[이진수표현] → -1.0011011×2³[부동소수점구조]
→ [부호부 음수, 지수부 3, 가수부 0011011]
-부동소수점표현법의 한계
float이나 double의 경우 가수부의 크기는 일정하다. 따라서 지수가 충분히 클 경우에는 소수점 이하를 표현할 수 없게 된다.
int형은 있는 그대로의 비트를 보여주면 되기 때문에 100%의 정확도를 가지며,
그에 비해 float형은 아주 큰 수를 표현할 수 있지만 그 수가 유효자리비트로 표현할 수 있는
한계를 넘어가버리게 되면 근사치를 취하게 된다. 실제로 값을 짤라먹는다는 말이다.
컴퓨터의 계산은 100% 믿을 수 있어야 하는데 이처럼 그 값을 제대로 표현하지 못하게 되면 어찌 될까.
아주 큰 수에서 이러한 경우가 발생하기 때문에 보통은 신경 쓰지 않아도 되지만 그것조차 고려를 해야한다면
해결 방법으로는 double 형을 쓰는 것이 있다.(double형도 더 정확한 정밀도를 제공할 뿐 완벽한 해결법은 아니다)