둘 다 4바이트의 자료형이지만 실제로 표현할 수 있는 수의 범위는 큰 차이가 납니다. 그 이유는 두 자료형을 구성하는 비트 구조가 다르기 때문입니다.
int의 경우 부호 비트 1비트 + 유효자리 비트 31비트로 구성됩니다.
-2,147,483,648 ~ 2,147,483,647 ( 2^-31 ~ 2^31-1 )
float의 경우 부호 비트 1비트 + 지수 비트 8비트 + 유효자리 비트 32비트로 구성됩니다.
3.4E-38 ~ 3.4E+38 ( 3.4 x 10^-38 ~ 3.4 x 10^38 )
0이 38개나 붙는 수를 표현할 수 있습니다. (조 단위의 숫자도 0은 12개...)
지수비트로 인해 표현 가능한 수의 범위가 int보다 훨씬 넓습니다. 다만 같은 바이트를 사용하는데 범위가 넓은 만큼 단점도 존재합니다.
int형은 있는 그대로의 비트를 보여주기 때문에 100%의 정확도를 가집니다. 하지만 float형의 경우 아주 큰 수를 표현할 수 있지만 그 수가 유효자리비트로 표현할 수 있는 한계를 넘게 되면 근사치를 취하게 됩니다. 정확도가 떨어지게 된다는 이야기입니다.
64바이트의 double형을 사용하면 정밀도가 높아지게 되지만 결국엔 float형과 비슷한 현상이 발생하게 됩니다. 그저 확률이 줄어들 뿐인거죠. 어떤 자료형을 사용하는 것으로 해결할 수는 없는 문제라고 합니다.