float이란 floating point number의 준말로, 부동소수점수라고도 한다.
이는 고정소수점수와 같이 이해하면 좋은데, 모두 소수를 표현하는 방식이라고 보면 된다.
https://woo-dev.tistory.com/93 이 링크를 참조하면 좋다.
부동 소수점에서는 소수점의 위치를 고정하지 않고, 그 위치를 나타내는 수를 따로 적어 유효숫자를 나타내는 가수와, 소수점의 위치를 나타내는 지수로 나누어 표현한다.
IEEE 754는 부동소수점을 표현하는 가장 널리 쓰이는 표준이다.
ex) 1.0을 고정소수점 수와 부동소수점 수로 표현해보자
- 고정소수점수=> 1bit(부호) + 16bit(정수) + 15bit(소수)
- 부동소수점수=> 1bit(부호) + 8bit(지수) + 23bit(가수)
우선 고정소수점의 경우,
부호는 양수이기 때문에 0
정수부분의 경우, 1을 이진수로 바꾸면 1이지만, 16bit만큼의 공간을 채우기 위해 0000000000000001 이 된다.
소수부분의 경우, 0이 되고 이는 마찬가지로 15bit만큼의 공간이 할당되어 있어 0으로 채우면,
따라서 0 0000000000000001 000000000000000 가 1.0의 고정소수점수가 된다.
정리하면, 고정소수점수는 단순히 이진수로 바꿔주면 된다
부동소수점의 경우,
마찬가지로 부호는 양수이기 때문에 0
지수부분의 경우, 바이어스 상수와 소수점을 옮긴 지수만큼의 수를 더해 이를 이진수로 바꿔준다.
(즉, 1.0에서는 더 이상 소수점을 옮길 필요가 없기 때문에
bias 상수(2^(8bit-1)-1)인 127과 2^0의 지수인 0을 더해준 127을 이진수로 바꾼 값(1111111)이 된다.)
따라서 01111111
bias상수 더보기
가수부분은 소수점 이하의 0부분을 이진수로 바꿔주면 되는데, 이 경우 0은 0이기 때문에 23bit를 0으로 채워주면
따라서 0 01111111 00000000000000000000000 이 1.0의 부동소수점수가 된다.
정리하면, 부동소수점수는 소수를 (1)이진수로 바꿔준 후, (2)소수점을 이동시켜 위의 과정을 거치면 된다.