본문 바로가기

Computer Science

컴퓨터에서 비트로 실수를 표현하는 방법

먼저 실수라는 개념에 대해 개괄적으로 짚어보겠습니다.

유리수와 무리수를 통틀어, 영어로 mistake가 아니라 real number 실수라고 부릅니다.

실수에는 세가지 특징이 있습니다.

  • 유리수와 유리수 사이에는 무수히 많은 유리수가 존재하며, 모든 유리수는 각각 수직선 위 한 점에 대응하여 나타낼 수 있다(유리수의 조밀성).
  • 무리수와 무리수 사이에는 무수히 많은 무리수가 존재하며, 모든 무리수는 각각 수직선 위 한 점에 대응하여 나타낼 수 있다(무리수의 조밀성).
  • 서로 다른 두 실수 사이에는 무수히 많은 실수가 존재한다. 또한 수직선을 실수에 대응하는 점들로 완전히 메울 수 있다(실수의 연속성).

또한 자연수도 무한하지만 무한한 실수는 무조건 무한한 자연수보다 크다는 법칙이 있습니다.

따라서 범위가 이렇게 커다란 수를 컴퓨터가 표현하는데에는 필연적인 한계가 존재하고 컴퓨터 과학자들은 실수를 좀 더 정확하고 경제적인 방식으로 표현할 방법을 연구해왔습니다.

 

총 세가지 방법이 있는데,

  • 고정소수점(fixed-point) 표현법
  • 부동소수점(floating-point) 표현법
  • 그리고 IEEE 부동소수점 수 표준입니다

고정소수점 표현법은 2진수로 소수를 표현하기 위해 2진소수점의 위치를 임의로 정하는 표현법입니다.

쉽게 컴퓨터에 4비트가 잇다고 치면 그 중 msb(most significant bit)쪽 두개의 비트로 정수값을 표현하고 lsb(least significat bit)쪽의 두 비트는 분수값을 표현하는데에 사용하는 방식인것입니다.

정수값과 분수값의 표현에 비트가 두 개씩 할당되기 때문에 이번 예에선 네 개의 정수와 소수점 아래의 네 개의 분수값이 표현가능하게 됩니다.

하지만 이 방법으로 쓸만한 범위의 실수를 표현하려면 메모리가 너무 많이 필요하기 때문에 범용 컴퓨터에선 거의 사용되지 않고 특수한 상황에서만 사용되고 있습니다.

 

부동소수점 표현법은 쉽게 풀어 설명해드리자면 소숫점 왼쪽이 한자리뿐인 소수인 가수부와 이를 몇번 거듭제곱할지를 나타내는 지수부로 나누어 실수를 표현하는 방식입니다.

지수부의 값에 따라 소숫점의 위치가 정해지기 때문에 이를 둥둥 떠다니는 소숫점, 부동소수점이라 부르는 것입니다.

알기쉽게 십진법으로 예를 들자면 0.0012를 1.2 * 10^-3으로 표현하는 방식인것입니다. 컴퓨터에선 곱의 좌항이 가수부, 우항이 지수부로써 비트에 저장되고 실수를 표현 합니다.

이 방식 또한 비효율적이기에 부동소수점으로 실수를 표현하는 새로운 표준안이 등장합니다.

 

IEEE 부동소수점 수 표준은 미국 전자전기공학회 IEEE에서 IEEE754라는 표준안을 정의하면서 컴퓨터로 실수를 표현하는 표준이 됐습니다.

이 방식은 더 많은 비트를 사용하고, 낭비하는 비트를 최소화하며 반올림을 쉽게 하기위해 여러 트릭을 가지고 있습니다만,

제가 공부한 책에서도 아직은 IEEE754의 세부사항을 알 필요는 없다고 말하고 있기에 여기서 설명하는 부분만 짚고 넘어가겠습니다.

부동소수점 표현법과 다른 IEEE 754의 첫번째 특징은 가수를 조정해 msb에 0이 없도록 하는것인데(leading zero를 배제함) 이를 정규화라고 하며 이것은 의미없이 낭비되는 비트를 최소화 한다는 것입니다.

두번째 특징은 가수의 msb에서 0을 생략하면 가수의 msb 비트엔 1이 담긴다는 사실을 알기 때문에 이를 생략하여 비트 사용을 한 개 줄이는 트릭을 사용하는 것입니다.

세번째로는 32비트를 사용하는 기본정밀도나 64비트를 사용하는 2배 정밀도 중 선택하여 실수표현에 사용 할 수 있다는 점도 부동소수점 표현법에는 없는 특징입니다.

마지막으로는 어떠한 수를 0으로 나눴을 때 생길 수 있는 음,양의 무한대나 NaN(수가 아님)을 표현하는 특정한 비트패턴을 제공하여 유용하게 사용할수 있게 하는것입니다.

'Computer Science' 카테고리의 다른 글

전기 회로와 스위치의 기초  (0) 2022.01.28