삼진법

삼진법(三進法, 영어: Ternary, base 3)은 3을 밑으로 하는 기수법이다. 비트와 마찬가지로 삼진법은 "트리트"(Trit, Trinary digit)라고 표기한다. 하나의 삼진법은 이진 로그(log2) 3비트(약 1.58496비트)의 정보와 같다. 비록 삼진법 수가 음수가 아닌 모든 수를 가리키는 경우가 많지만 형용사는 균형잡힌 체계를 가리킨다. 특히 0, 1, 2의 형용사는 비교 논리와 3진법 컴퓨터에 사용되는 −1, 0, +1을 구성하는 균형 3진법 체계에 이름을 부여한다. 삼진법에서는 0, 1, 2의 합계 3개의 숫자를 사용하고, 3을 10, 4를 11…으로 표기한다. 3마다 자릿수가 올라가므로 3을 사용할 수 있는 N진법은 사진법 이후에 3을 사용할 수 있고 1/3이 분할되는 N진법은 육진법 이후가 된다. 자릿수 증가도 삼진법에서는 3의 거듭제곱으로 자릿수가 하나 늘어난다. 아래 표에 이진법(밑이 2), 삼진법(밑이 3), 육진법(밑이 2×3), 십진법(밑이 2×5)의 각 표기법의 차이를 게재한다. ※ 자리수는 십진수로 표기한다. 삼진법에서 설명한 덧셈 및 곱셈 표는 다음과 같다. 3은 2로 나누어지지 않기 때문에 홀수이다. 이 때문에 삼진법에서는 1/2를 0.1111…이라고 표기하기 때문에 "1÷짝수"가 모두 나눠지지 않는다. 삼진법이나 오진법 등의 홀수 진법은 1/2이 나누어지지 않기 때문에 그 어느 한 자리 수로 반올림을 실시하려고 할 때 예를 들어 육진법의 0.3이나 십진법의 0.5와 같이 "2로 나누면 같은 수가 나오지 않는다"는 특징을 갖는다. 또한 나중에 언급하는 평행삼진법에는 어떤 자리로 중단만 해도 "1 이하면 버리고 2 이상이면 올리는" 형식의 반올림이 된다는 특징을 갖는다. 그러나 다음 수인 3이 밑이 되어 있으므로 "3으로 나누면 같은 수가 나온다"라는 특징을 가진다. 이는 육진법의 0.2나 구진법의 0.3 등과 동일하다. ※ 단위분수와 제수의 소인수분해는 십진수로 표기한다. 가중치를 갖는 각 자리의 값을 음수 쪽에도 돌리는 평형기수법의 가장 단순한 방식이다(같은 생각을 확장하면 평형오진법이나 평형칠진법을 생각할 수 있다). am의 값을 -1, 0, 1로 한다. 자릿수 기수법 안에 음수도 포함해 깨끗하게 표현할 수 있다는 성질이 있으며 도널드 커누스와 같이 "아마 모든 기수법 중 가장 아름답다"고 말하는 사람도 있다. 그러나 이진법 등과 비교해서 응용도 많지 않기 때문에 거의 쓰이지 않는다. 여기에서는 -1을 1 ¯ {\displaystyle {\bar {1}}} 로 표시하도록 한다. 또한 이 표기법은 저울로 "1g, 3g, 9g, 27g의 분동을 이용하여 1 ~ 40g의 질량을 재는 방법"과도 비슷하다. 평형삼진법에서는 통상과 약간 다른 연산이 필요하다. 덧셈, 곱셈의 결과는 다음과 같다. 윗자리에 영향을 미치는 것은 덧셈 2개 뿐이다. 이진과 마찬가지로 곱셈에서는 윗자리에 영향을 미치지 않는다. 뺄셈은 복잡해 보이지만 덧셈의 결과를 알고 있으면 어렵지 않다. 뺄셈에서는 1 ¯ {\displaystyle {\bar {1}}} 와 1 {\displaystyle 1} 를 교체한 것을 더하는 방법도 유효하다. 다만 나눗셈은 귀찮은 편이다. 특정 아날로그 논리에서는 회로의 상태가 삼진법으로 표현되는 경우가 많다. 이는 CMOS 회로 및 트랜지스터-트랜지스터 논리(토템-폴(Totem-Pole) 출력)에서 가장 흔하게 볼 수 있다. 출력은 낮거나(접지됨), 높음 또는 열림(하이 Z(High-Z))이라고 한다. 이 구성에서 회로의 출력은 실제로 어떤 전압 기준에도 전혀 연결되지 않는다. 신호가 일반적으로 특정 기준 또는 특정 전압 레벨로 접지되는 경우 상태는 개방되어 있고 자체 기준을 제공하기 때문에 고임피던스라고 한다. 따라서 실제 전압 레벨을 예측할 수 없는 경우도 있다. 흔치 않은 "삼진 포인트"는 미국 야구(보통 투수만을 위함)의 수비 통계로 이닝의 분수 부분을 나타낸다. 공격 팀은 3번의 아웃이 허용되므로 각 아웃은 방어 이닝의 3분의 1로 간주되고 .1로 표시된다. 예를 들어 한 야구 선수가 4회, 5회, 6회를 모두 투구하여 7회에 2아웃을 달성한다면 해당 선수의 투구 이닝은 3+2⁄3(일부 경기 기록관들이 대체적으로 사용하는 경우도 있음)에 해당하는 3.2로 표기될 것이다. 이 사용법에서는 숫자의 부분만 내부 형식으로 작성된다. 삼진법 수는 시에르핀스키 삼각형이나 칸토어 집합과 같은 자기 유사 구조를 편리하게 전달하는데 사용될 수 있다. 또한 3번째 표현은 칸토어 집합이 구성되는 방식 때문에 칸토어 집합과 관련 점 집합을 정의하는 데 유용한 것으로 밝혀졌다. 칸토어 집합은 숫자 1의 어떤 인스턴스도 포함하지 않는 3차 식을 가진 0부터 1까지의 점들로 구성된다. 삼진 시스템의 모든 종단 팽창은 마지막 0이 아닌 항 이전의 항과 동일하고 그 다음에는 1번째 표현의 마지막 0이 아닌 항보다 작은 항, 그 다음에는 2개의 무한 꼬리가 있는 식과 같다. 예를 들어 0.1020은 0.1012222...와 같다. 1번째 식 "2"까지 확장이 동일하기 때문에 2번째 확장에서는 2개가 감소했고 2번째 식에서는 후행 0이 후행 2로 대체되었다. 삼진법은 가장 낮은 밑 경제(Radix economy)를 가진 정수의 밑이며 이진법과 사진법이 근접하게 뒤따른다. 이는 자연로그의 밑(e)에 근접했기 때문이다. 이러한 효율성 때문에 일부 컴퓨팅 시스템에 활용되어 왔다. 또한 모든 분기에 간단한 경로를 허용하는 전화 메뉴 시스템과 같은 3가지 옵션 "트리"(Trees)를 나타내는 데에 사용된다. 난해한 프로그래밍 언어인 말레볼제에서는 삼진법 가상 머신이 사용된다. 이중 이진수 표시와 부호화된 숫자 표현 방식 가운데 하나인 중복 이진 표현(Redundant binary representation)는 낮은 수준의 소프트웨어와 하드웨어에서 때때로 정수의 빠른 추가를 달성하는 데에 사용된다. 왜냐하면 캐리어를 제거할 수 있기 때문이다. 2진법 컴퓨터를 활용한 3진법 컴퓨터 시뮬레이션, 또는 3진법 컴퓨터와 2진법 컴퓨터 사이의 인터페이스에는 각 삼진수를 인코딩하는 데에 2비트가 사용되는 이진화 삼진법(Binary-coded ternary, BCT) 숫자의 사용이 포함될 수 있다. BCT 인코딩은 이진화 십진법(Binary-coded decimal, BCD) 인코딩과 유사하다. 삼진법 값 0, 1, 2가 각각 00, 01, 10으로 인코딩된 경우에는 이진화 삼진법과 이진법 사이의 어느 방향으로든 변환은 로그 시간으로 수행될 수 있다. BCT 연산을 지원하는 C 코드의 라이브러리를 이용할 수 있다. 세툰(Setun)과 같은 일부 3진법 컴퓨터는 "트라이트"(Tryte)를 6트리트 또는 약 9.5비트("사실상"의 이진 바이트보다 더 많은 정보를 보유함)로 정의했다. 큐트리트 세툰 Ashley MacLennan (2019년 1월 9일). “A complete beginner’s guide to baseball stats: Pitching statistics, and what they mean”. 《Bless You Boys》. 2020년 7월 30일에 확인함.  “Stats - Team - Pitching”. 《MLB (Major League Baseball)》. 2020년 7월 30일에 확인함.  Soltanifar, Mohsen (2006년). “On A sequence of cantor Fractals”. 《Rose Hulman Undergraduate Mathematics Journal》 7 (1). Paper 9.  Soltanifar, Mohsen (2006년). “A Different Description of A Family of Middle–α Cantor Sets”. 《American Journal of Undergraduate Research》 5 (2): 9–12.  Phatak, D. S.; Koren, I. (1994년). “Hybrid signed–digit number systems: a unified framework for redundant number representations with bounded carry propagation chains” (PDF). 《IEEE Transactions on Computers》 43 (8): 880–891. CiteSeerX 10.1.1.352.6407. doi:10.1109/12.295850.  Frieder, Gideon; Luk, Clement (1975년 2월). “Algorithms for Binary Coded Balanced and Ordinary Ternary Operations”. 《IEEE Transactions on Computers》 C–24 (2): 212–215. doi:10.1109/T-C.1975.224188.  Behrooz, Parhami; Michael, McKeown (2013년 11월 3일). “Arithmetic with Binary-Encoded Balanced Ternary Numbers”. 《Proceedings 2013 Asilomar Conference on Signals, Systems and Computers》 (Pacific Grove, CA, USA): 1130–1133. doi:10.1109/ACSSC.2013.6810470. ISBN 978-1-4799-2390-8.  Jones, Douglas W. (2016년 6월). “Binary Coded Ternary and its Inverse”.  Jones, Douglas W. (2015년 12월 29일). “Ternary Data Types for C Programmers”.  Impagliazzo, John; Proydakov, Eduard (2011년 9월 6일). 《Perspectives on Soviet and Russian Computing: First IFIP WG 9.7 Conference, SoRuCom 2006, Petrozavodsk, Russia, July 3—7, 2006, Revised Selected Papers》. Springer. ISBN 978-3-64222816-2.  Brousentsov, N. P.; Maslov, S. P.; Ramil Alvarez, J.; Zhogolev, E. A. “Development of ternary computers at Moscow State University”. 2010년 1월 20일에 확인함.