컴퓨터는 숫자들을 2진수로 표현을 한다.
그러면 실수와 같은 소숫점이 있는 숫자들은 어떻게 표현을 해야할까?
마찬가지로 2진수를 사용한다. 이런 소숫점이 있는 아이들은 2가지 방식으로 컴퓨터가 처리를 할 수 있는데 먼저 첫번째는 Fixed point(고정 소숫점), 그리고 두번째는 Floating Point(부동 소숫점)이다.
소숫점 위치를 정해두고 sign bit, integer bit(정수부), fraction bit(소수부)로 나뉜다. 말 그대로 고정이기 때문에 소숫점 위치를 마음대로 정해서 넣어버리면 된다. 그러면,
0.45
를 2배해주면 0.9
가 된다. 이러면 1보다 작기 때문에 binary로는 0이 들어가게 된다. 다음으로 0.9
의 2배인 1.8
이 1보다 크기 때문에 뒤에 1을 넣고 1을 뺴준다. 그러면 0.8
이 된다. 이 과정을 우리가 필요한 bit만큼(위의 고정소숫점에서 26bit, 부동소숫점에서는 23bit) 구한다. 이러면 소수부의 2진수 변환이 되는것이다.이러한 고정소수점 방식은 구현하기 편리하지만 사용하는 비트 수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 실수를 다룰 필요가 있는 범용 시스템에서는 거의 안 쓰이고, 높은 정밀도가 필요없는 소규모 시스템에서는 간혹 쓰이기도 한다고 한다.
따라서 이런 문제를 해결하기 위해서 소수점을 고정하지 않고 둥둥 떠 다닐 수 있게 하는 부동 소수점(floating point)을 사용한다.
참고
https://gsmesie692.tistory.com/94
https://steemit.com/kr/@modolee/floating-point
https://en.wikipedia.org/wiki/IEEE_754