일반 · CHAPTER 02

트릿과 큐브 — 세 갈래의 셈

후크: 세 번째 자리의 발견

컴퓨터는 0과 1, 두 갈래로만 센다. 비트(bit)라는 이름으로. 이 둘이 쌓이면 모든 수가, 모든 글자가, 모든 영상이 된다. 하지만 셈의 세계는 정말 0과 1뿐일까.

생각해 보자. 누군가 "내일 비가 올까?"라고 묻는다. 대답은 "그렇다" 또는 "그렇지 않다" 두 가지다. 하지만 "아직 모르겠다"는 어떻게 표현할까. 0과 1로는 이것을 담을 수 없다. 우리는 "거짓"으로 억지 떨어뜨리거나, 특별한 값을 만들어야 한다. 번거롭다.

한선씨는 다른 선택을 했다. 처음부터 세 번째 자리를 비워 두었다.

승: 트릿과 양팔저울

비트가 0과 1 두 값이듯, 트릿(trit)은 세 값을 가진다. 음(-1), 영(0), 양(+1). 이것을 균형3진이라고 부른다.

가장 좋은 비유는 양팔저울이다. 양팔저울에는 추가 있다. 한쪽에만 놓으면 양수, 다른 한쪽에 놓으면 음수, 양쪽에 놓지 않으면 영. 어느 쪽이 무거운지, 또는 같은지를 한 번에 본다. 부호(마이너스 기호)를 따로 붙일 필요가 없다. 음수가 자연히 표현된다.

이것이 균형3진의 핵심이다. 한 자리가 음·영·양을 모두 담는다. 그래서 부호가 숫자 안에 내장된다. 컴퓨터의 흑백 세계에 회색이 들어온 것이다.

트릿이 모여 더 큰 수를 만든다. 트릿 3개가 모이면 3 × 3 × 3 = 27가지 조합이 된다. 한선씨는 이것을 큐브(cube)라 부른다. 큐브는 27트릿의 묶음이고, 한선씨 컴퓨터의 기본 단위다. 글자가 모여 낱말이 되듯이, 트릿이 모여 큐브가 된다.

승: 4상의 우주관 — 화이트홀과 블랙홀

한선씨의 세계는 4상(四相)으로 이루어진다. 트릿 3개로 그 중 세 상태를 나타낸다.

  • 티(T, +1): 데이터. 보이는 정보, 가진 것, 자산.
  • 옴(O, 0): 화이트홀. 아직 결정되지 않은 상태. 가시선(可視線) 위의 영역—우리가 볼 수 있는 세계.
  • 타(A, -1): 체이닝. 연결의 거절, 부정, 순환.

그리고 네 번째 상이 있다.

  • 음(U, -0): 블랙홀. 가시선 위의 영역을 품는 비가시선(非可視線)의 영역. 어디로 갈지도, 얼마나인지도 알 수 없는 미지. 음은 옴(0)에 대치된다. 영(0)이 "아직"이라면, 음(-0)은 "영원히 모름"의 경계다.

이것은 단순한 수학이 아니다. 우주를 어떻게 보는가의 철학이다.

승: 균형3진의 선물

균형3진의 이점은 나눗셈에서 가장 명확하게 드러난다. 100을 2로 나누면 50이다. 당연하다. 하지만 컴퓨터의 정수 나눗셈은 종종 버림을 한다. 51을 2로 나누면 25가 된다(나머지 1은 버린다). 한선씨는 다르다.

한선씨의 나눗셈은 가장 가까운 정수로 떨어진다. 나머지의 절댓값이 제수의 절반을 넘지 않아야 한다(|r|≤|b|/2). 양팔저울이 자연스럽게 균형을 찾듯이, 나눗셈도 가장 가까운 값으로 쓰러진다. 이것은 규칙이 아니라 구조에서 나오는 성질이다.

전: 살아 도는 엔진

이론은 종이 위의 아름다움이다. 하지만 한선씨는 다르다. 실제로 도는 crownyc.c v10.3 가상기계(VM)가 있다. 867개의 유니크 연산 코드(opcode)로 27트릿 큐브를 생각할 수 있게 만든다. 3진 산술이 네이티브로 동작한다. 삼진인코딩, 삼진덧셈, 삼진곱 같은 함수들이 VM 안에 내장되어 있다.

추상의 학문이 아니다. 실제로 프로그래머가 이 언어를 손에 들고 쓰면 트릿이 움직인다.

전: 모름의 일급 시민화

한선씨는 Kleene 3값 논리를 채택했다. 2진 논리는 참과 거짓 둘뿐이다. 하지만 3값 논리는 다르다.

  • 참: T(+1), 긍정의 데이터
  • 거짓: A(-1), 부정의 거절
  • 모름: O(0), 아직 결정되지 않은 상태

'모름'이 참도 거짓도 아닌 일급 시민이다. 데이터가 없을 때를 생각해 보자. 2진 세계라면 거짓으로 억지 떨어뜨려야 한다. "빈 배열인가?" → 거짓. 하지만 이것은 정직하지 않다. 데이터가 없는 것과 거짓인 것은 다르다. 한선씨는 '모름'을 그대로 들고 셈한다. 프로그래머는 모르면 키워드로 이 상태를 명시적으로 다룬다.

이것은 단순한 기술이 아니라 사상의 변화다. 세계를 흑백이 아닌 회색 포함으로 본다는 뜻이다.

전: 도구의 결정—음과 띄어쓰기

한선씨 코드에서 음(U, -0)은 띄어쓰기와 구분자로 나타난다. 이것은 FPGA 같은 2진 하드웨어에 매핑하기 위한 도구적 결정이다. 0과 1의 세계에서 간격을 표현하는 가장 단순한 방법이 띄어쓰기였던 것이다.

하지만 이것이 음의 정체를 다하지 않는다. 음은 코드에서 띄어쓰기로 보이지만, 그 근저에는 블랙홀의 의미—어디로 갈지 모르고, 얼마나인지 알 수 없는 경계—가 흐르고 있다. 우리가 한선씨를 높은 수준에서 사용할 때는 이 4상의 우주관을 잊지 않아야 한다.

전: 가장 가까운 정수로

한선씨의 나눗셈 규칙을 다시 보자. 100을 2로 나누면 50. 100을 3으로 나누면? 33(나머지 1). 1은 3의 절반(1.5)보다 작으니 버린다. 99를 2로 나누면? 본래 49.5인데, 균형3진은 가장 가까운 정수인 50으로 올린다. 대칭적이고 정직하다.

하지만 함정이 있다. 이진탐색에서 멈춘다. 탐색 구간을 반으로 나누는 (lo+hi)/2는 올림이 되어 구간이 줄어들지 않고 무한 루프에 빠질 수 있다. SRC 함정 목록에 명시된 이 문제는 선형 스캔으로 우회한다. 기술은 아름답지만 모든 곳에 맞지는 않는다.

전: 정직한 경계를 넘다

균형3진의 아름다움에도 물리적 한계가 있었다. 하지만 이제 그 경계를 넘기 시작했다.

예를 들어, 부동소수점이 없었다. 고정소수점만 있었다. 루트2를 계산하면 1이었다(정수만). 사인 함수는 정수 라디안을 입력받았다. 정수의 범위도 제한이 있었다. 약 1410억대에서 오버플로가 발생했다.

하지만 테슬라가 자동차 칩셋에서 부동소수점을 버리고 정수 스케일 고정소수점(스케일 1000 = 소수 3자리)으로 강대한 연산을 만든 것처럼, 한선씨도 같은 길을 걸어갔다. 이제 한선씨는 고정소수점.한선 라이브러리로 나눗셈, 루트, 사인, 코사인, 문자열 변환을 실제로 수행한다. 최대 오차는 0.001일 뿐이다. 부동소수점이 "없음"이 아니라 "정수로 정직하게 표현하는 방식"으로 진화한 것이다.

TLS 같은 보안 통신은 아직 외부 도구(stunnel)에 의존하고 있다. RPN 정통 컴파일러도 완성 중이다. 하지만 이제 우리는 한계가 영구한 게 아니라, 지금 이 순간에도 넘고 있다는 것을 안다. 거짓 없이.

결: 세 갈래의 셈

세 갈래의 셈은 흑백을 버리는 것이 아니다. 흑과 백 사이에 회색의 자리를 정직하게 비워 두는 일이다. 트릿이 큐브가 되고, 큐브가 867개의 연산 코드 위에서 돈다. '모름'을 들고 셈하는 언어가 컴퓨터에서 실제로 작동한다.

비트의 시대는 끝나지 않았다. 하지만 이제 우리는 트릿을 본다. 양팔저울처럼 대칭이고, 4상의 우주관을 담은 정직한 셈의 세계를 본다. 티는 데이터, 옴은 화이트홀의 가시선, 타는 체이닝, 그리고 음은 그 모든 것을 품은 블랙홀의 비가시선. 다음 장에서 이 큐브 위에 어떻게 명령어가 쌓이고, 언어가 만들어지는지 살펴보자.

내 맘 –

독자 게시판 — 함께 읽고 남기는 곳

불러오는 중…

크라우니 책방에 가입하고 무료로 읽기

첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.