더북(TheBook)

이러한 조건들을 파악하고 나니 이 값을 직렬화하는 데 비트 수가 얼마나 필요한지 알게 되었다. 다음 공식으로 X 축에 가능한 값의 최대 개수를 산할 수 있다.

(최댓값 - 최솟값) / 정밀도 + 1 = (2000 - (-2000)) / 0.1 + 1 = 40001

이는 직렬화할 내용이 최대 40001가지의 값을 가질 수 있다는 뜻이다. 어떤 정수 하나를 부동소수점 하나에 대응하게 매핑할 수 있으면, 직렬화 코드에서 X와 Z 값을 정수로 취급하여 기록할 수 있을 것이다.

다행히 고정소수점(fixed point)라 불리는 숫자 체계가 있어 이를 이용하면 간단하다. 고정소수점 숫자는 정수처럼 보이지만 실제로는 미리 정해둔 상수로 나누어 쓰는 숫자이다. 이 경우엔 요구 정밀도를 그 상숫값으로 쓰면 된다. 고정소수점으로 만들고 나면 항상 40001보다 작은 정수에 필요한 비트 수만큼만 직렬화하면 된다. log2 40001은 15.3이므로, X와 Z에 각각 16비트만 있으면 직렬화할 수 있다. 이 내용을 종합해 코드로 구현해 보면 다음과 같다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.