실수의 저장 원리
Last updated
Last updated
이 문서에서는 실수(부동소수점수)의 저장 원리에 대해서 살펴본다. 이 문서는 위키백과를 참고하였.
실수는 크게 다음 두 가지의 표현 방식을 가질 수 있다.
고정 소수점 방식(Fixed Point)
부동 소수점 방식(Floating Point)
고정 소수점 방식은 우리가 일반적으로 표기하는 것처럼 소수점을 기준으로 정수
와 소수
부분으로 나누어 표기하는 방식이다. 자리가 고정되어 있기 때문에 표시할 수 있는 숫자의 범위가 제한적이며, 정밀해질 수록 오차가 발생한다.
부동 소수점 방식은 고정 소수점 방식의 문제점인 유연성을 해소하기 위한 형태이며, 지수부와 가수부로 구분하여 표기하는 방식이다. 자세한 방식은 윗부분의 위키백과에서 확인할 수 있으므로 대략적으로 이해를 돕기 위한 설명만 진행한다. 설명은 10진수로 진행한다.
위와 같은 숫자가 있다고 가정하면 고정 소수점 방식에서는 다음과 같이 저장한다.
부호 : 0
정수 : 12345
소수 : 6789
부동 소수점 방식에서는 다음과 같이 저장한다.
부호 : 0
지수 : 10000
가수 : 123456789
지수는 원래 숫자에서 정수부를 한 자리만 두도록 변경한 뒤 곱해야 하는 숫자를 말하며, 가수는 소수점을 제거한 숫자 전체를 말한다. 즉, 가수와 지수를 합쳐 원래 숫자를 만들어낼 수 있다.
가수가 123456789이고 지수가 10000이므로 원래 숫자는 1.23456789 * 10000
= 12345.6789
고정소수점보다는 좀 더 넓은 범위를 표현할 수 있지만, 여전히 문제가 되는 정밀도는 해결이 불가능하다. 자바에서는 4바이트 실수인 float가 약 6자리, 8byte인 double이 약 15자리의 소수부를 표시할 수 있다.
float : 부호(1) + 지수(8) + 가수(23) = 32bit
double : 부호(1) + 지수(11) + 가수(52) = 64bit