실수의 저장 원리

실수의 저장 원리

이 문서에서는 실수(부동소수점수)의 저장 원리에 대해서 살펴본다. 이 문서는 위키백과를 참고하였.

표현 방식

실수는 크게 다음 두 가지의 표현 방식을 가질 수 있다.

  • 고정 소수점 방식(Fixed Point)

  • 부동 소수점 방식(Floating Point)

고정 소수점 방식

고정 소수점 방식은 우리가 일반적으로 표기하는 것처럼 소수점을 기준으로 정수소수 부분으로 나누어 표기하는 방식이다. 자리가 고정되어 있기 때문에 표시할 수 있는 숫자의 범위가 제한적이며, 정밀해질 수록 오차가 발생한다.

부동 소수점 방식

부동 소수점 방식은 고정 소수점 방식의 문제점인 유연성을 해소하기 위한 형태이며, 지수부와 가수부로 구분하여 표기하는 방식이다. 자세한 방식은 윗부분의 위키백과에서 확인할 수 있으므로 대략적으로 이해를 돕기 위한 설명만 진행한다. 설명은 10진수로 진행한다.

12345.6789

위와 같은 숫자가 있다고 가정하면 고정 소수점 방식에서는 다음과 같이 저장한다.

  • 부호 : 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

Last updated