[컴퓨터 이론] float VS int

Minsang Kim·2024년 1월 16일
0

기술면접

목록 보기
1/6

오늘의 질문

float와 int의 표현 가능한 수의 범위가 다른 이유는 무엇인가요?

오늘의 답변

실수형 타입인 float와 정수형 타입인 int의 표현 가능한 수의 범위가 다른 이유는 저장된 데이터를 나타내는 방식이 다르기 때문입니다.
int는 이진수로 수를 변환하고 저장하기 때문에 정확성이 보장됩니다.
float는 이진수로 변환한 수를 부호, 지수, 가수로 분리해 저장하기 때문에 표현 가능한 수의 범위가 넓어지지만, 가수 비트의 한계로 인해 정확도가 떨어집니다.
따라서 정확한 값이 보장되어야 한다면 int를, 넓은 범위의 수를 저장하고 싶다면 float를 상황에 맞게 사용해야 합니다.

깊게 보기

int

4 byte = 32 bit
범위 : -2,147,483,648 ~ 2,147,438,647


float

sign 1 bit (부호) + exponent 8 bit (지수) + mantissa 23 bit (가수)
범위 : 3.4E-38(-3.410^38) ~ 3.4E+38(3.410^38)

부동 소수점

int는 이진법(2's complement)을 갖다 쓰기 때문에 int 범위 내에서는 값이 틀릴 수가 없다.

반면에 float는 엄청나게 넓은 표현 범위를 자랑한다.
아니 소수점까지 쓰면서 왜 정수형보다 넓은거냐라고 묻는다면 부동소수점 방식을 사용하기 때문이다.

부동 소수점은 IEEE에서 소수 표현 방식의 표준으로 제안한 방식으로.
수를 부호, 지수, 가수로 나누어 계산하는 것이다.

부동 소수점 방식을 간단하게 예를 들어보자.
263.3을 이진수 부동 소수점 방식으로 변환해보면
100000111.010011001100110... = 1.00000111010011001100110... * 2^8
이를 float로 저장한다면,

부호 : 0 (양수)
지수 : 10000111 (127 + 8)
가수 : 00000111010011001100110

무한 소수의 뒷 부분이 잘리게 된다.
이를 다시 십진수로 나타내면 0.29998779296875이 된다.

때문에 이진법으로 변환했을 때 가수 비트의 23비트를 초과하는 경우.
0.1 + 0.2 = 0.3이 컴퓨터에게는 통하지 않는 것이다.

또한 낮은 수의 소수점 표현 방식은 정확하고 수가 커지면 커질수록 가수비트의 한계로 인해 소수점 뒤가 잘리기 때문에 정확도가 떨어질 것 같다.

=> 정확도의 int냐 범위의 float냐 상황에 맞게 선택하자.

+ TMI

  • float형을 계산하기 위한 별도의 하드웨어, FPU(Floating Point Unit)가 필요하다.
  • 고정 소수점을 쓰지 않는 이유는 정수와 소수를 표현하는 비트를 고정해놓기 보다는 유연하게 소수점이 이동하는 것이 더 많은 수를 표현할 수 있기 때문이다.

=====================================================

참조

float형과 int형, 뭐가 다를까?
int (integer) 와 float 자료형은 어떻게 다른가? JAVA에서...
같은 4byte int와 float의 차이
부동 소수점(Floating Point)란 무엇인가?

profile
게임만 하다가 개발자로

0개의 댓글