실수의 저장 원리

실수의 저장 원리

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

표현 방식

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

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

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

고정 소수점 방식

그림출처 : https://hoodymong.tistory.com/50

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

부동 소수점 방식

그림출처 : https://hoodymong.tistory.com/50

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