학교에서 수학을 배울 때 우리는 이렇게 배웠습니다. 15와 5를 더하면 20, 20에서 5를 빼면 15. 이 방식은 직관적이지만 한 가지 전제가 있습니다. 모든 수를 정밀하게 맞춰야 한다는 것입니다. 15.7을 더하고 싶다면 15.7을 정확히 표현해야 하고, 15.3을 빼고 싶다면 15.3을 정확히 다뤄야 합니다.
그런데 크라우니 진법은 다른 방식을 선택합니다. 덧셈과 뺄셈 대신, 프레임과 거주자라는 개념을 씁니다. 이것을 셀-거주자 모델(Cell-Resident Model)이라고 부릅니다.
어떤 값이 들어올 때, 이 값을 그것보다 살짝 큰 크라우니 격자에 넣습니다. 값이 격자 안에 깃들어 삽니다. 그리고 격자와 값의 차이, 즉 잉여는 음 바다로 보냅니다. 딱 맞추려 하지 않습니다. 들어가고 남으면 흘려 보냅니다.
이 세 단계를 차례로 살펴봅니다.
---
어떤 값이 시스템에 들어옵니다. 예를 들어 15.7이라는 값입니다.
첫 단계는 이 값을 덮을 수 있는 가장 가까운 크라우니 격자를 찾는 것입니다. 격자표를 보면 Cr³ = 20입니다. 15.7보다 크고, 가장 가까이에 있는 크라우니 격자는 20입니다. 이것이 올림프레임(Ceiling Frame)입니다.
'올림'이라는 이름이 붙은 이유가 있습니다. 값을 있는 그대로 쓰지 않고, 위로 올려서 격자에 맞추기 때문입니다. 천장을 올려다보듯이, 값 위에 덮을 격자를 찾는 것입니다.
방향이 증폭(티)이면 크 격자를 씌우고, 감소(타)면 카 격자를 씌웁니다. 여기서 이전 장에서 말한 방향과 보폭의 분리가 작동합니다. 방향(티/타)이 먼저 결정되고, 그에 맞는 격자가 씌워집니다.
---
올림프레임이 정해지면, 그 안에 실제 값이 들어갑니다. 15.7이 20이라는 프레임 안에 들어오는 것입니다.
그런데 이 과정에서 소수점을 버립니다. 15.7은 15가 됩니다. 소수점 이하는 음 바다로 보내 버리는 것입니다. 이렇게 정수화된 값, 15를 깃든수(Resident Number)라 부릅니다. 프레임이라는 집에 깃들어 사는 값입니다.
깃든수는 항상 정수입니다. 프레임도 정수(격자의 호출 정수), 깃든수도 정수. 이 시스템은 정수만 다룹니다. 소수점은 음이 받아 가기 때문입니다.
---
올림프레임(20)에서 깃든수(15)를 빼면 5가 남습니다. 이 5가 음덤프(Um Dump)입니다. 잉여 에너지, 처리되지 않은 차이가 음 바다로 내려가는 과정입니다.
프레임 20에서 거주자 15가 살고 있을 때, 5만큼의 빈 공간이 생깁니다. 이 공간은 버려지지 않습니다. 음 바다에 예치됩니다. 나중에 비슷한 연산이 일어날 때 이 잉여가 자원으로 돌아올 수 있습니다.
회사의 예비비와 같습니다. 어떤 프로젝트 예산을 1000만 원으로 잡았는데 실제로 850만 원이 쓰였다면, 남은 150만 원은 회사 예비금으로 돌아갑니다. 사라지지 않고, 다음에 쓰일 자원이 됩니다.
---
입력값: 15.7 (증폭 방향, 티)
1단계 — 올림프레임: Cr³ = 20 (15.7을 덮는 가장 가까운 크 격자)
2단계 — 깃든수: 15 (소수점 이하 0.7은 음 덤프)
3단계 — 음덤프: 20 - 15 = 5 (음 바다로)
결과: 프레임 20 안에 깃든수 15, 음 5 예치.
이 전 과정이 O(1), 즉 고정된 한 번의 연산으로 끝납니다. 격자표를 한 번 찾고, 빼면 끝입니다. 값이 아무리 크고 복잡해도 과정은 항상 이 세 단계입니다.
---
크라우니 진법에서 뺄셈은 위상 반전으로 대체됩니다. 15에서 7을 빼는 것이 아니라, 7을 타(감소) 방향으로 뒤집어서 더하는 것입니다. 부호비트가 사라집니다.
이것은 전자회로에서 의미 있는 효율입니다. 덧셈 회로와 뺄셈 회로를 따로 만들지 않아도 됩니다. 방향 비트 하나만 있으면 됩니다. 게이트 수가 절반이 됩니다.
덧셈과 뺄셈을 버리고 방향과 격자로 대신하는 것, 이것이 셀-거주자 모델이 전통적 사칙연산에 비해 달리 생각하는 핵심입니다. 더 복잡한 것처럼 보이지만, 실제로 연산 회로는 단순해지고 오차 처리는 음이 대신 맡아 자동화됩니다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.