| 01 Aug 2026 | Jimmy Ostler | Word Count: 862 | Reading Time: 5 Min |
When working with ternary, it's nice to have a denser representation of the numbers, like hexadecimal. There of course already exist versions of this, here (Douglas Jones) and here (100R).
Beyond the name being different, which I have my reasons for, I also chose a separate way of representing balanced numbers than both of these people. Mine lines up closer to 100R's version, making use of the fact that 26 letters + 0 equals exactly 27, or the total number of representations using 3 ternary digits (called tribbles1). Theirs does the same, but includes unsigned and 3's complement ternary as well.
Having considered theirs, I believe I would not do the same as they did either.
My Balanced Representation
| -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Z | Y | X | W | V | U | T | S | R | Q | P | O | N | 0 | A | B | C | D | E | F | G | H | I | J | K | L | M |
You'll notice it a little strange. Balanced ternary radiates out from 0, meaning that if we want to represent 0 using 0, we must split the alphabet. 100R uses different letters to represent different numbers based on the representation, but I didn't want that. My heptavigntimal for balanced ternary does line up with 100R's for 3's complement, so clearly this representation makes sense for signed numbers in some way, since we came up with this independently when encountering Douglas Jones' manifesto.
I prefer using 0 differently with different representations though. The digit 0 should always line up with the actual number. This results in some changes to 100R's table. When there exists numbers shared between signed and unsigned ternary, I think they should use the same septivigntimal representation, no matter the system being used.
That gives this for unsigned numbers:
| 0 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
This is a pretty straightforward mapping, and likely what most would come up with for an unsigned-only system.
Mine also simplifies communication. We use septivigntimal to represent numbers, which can be represented separately using different systems. This does lead to a similar problem though, since unlike binary, the unsigned range doesn't line up with the equivalent signed number when converting balanced ternary to unsigned ternary. Unfortunately... this is true for most every system when converting between balanced and unsigned ternary. We could simply say that when we add one to 13 and get -13 that it is equivalent to 14. This doesn't line up with septivigntimal's representation of 14, which is N. It also simply doesn't work with the existing methods of doing unsigned ternary. It also means that there is no universal method for representing a simple layout of trits, unless we decide to just arbitrarily pick one. And if we do that, the other needs to be converted. Ideally, our machine code is agnostic to what our high level code is intending. This may be too lofty an ideal, and could depend on whether the machine is intended to do balanced or unsigned arithmetic. These could simply be 2 different kinds of machine. I don't like that option, and I think we can do better. It's certainly not a solution to our current problem. I think, since balanced ternary is the whole reason to use this kind of computer, we use balanced ternary as our source of truth, and ensure strong tooling is available from the very start to avoid possible issues. This was less possible for binary computers during the early days. It is possible now, and we should strive for extremely strong tooling from the start.
Q: Won't using 0 and O be confusing?
A: Yes, sometimes, but I intend on making all fonts for my VM clearly different for these. This doesn't solve the problem, but I think the benefits are worth it. (I briefly considered using thorn (þ), but I thought using 0 as an anchor made a lot more sense. A is too 1 coded to be 0, and it removes the symmetry that balanced ternary has so naturally)
Q: Why Septivigntimal instead of Heptavigntimal?
A: I liked the sound better. The others use hept- because it lines up with the greek (hex) then latin (decem). Septivigntimal happens to be entirely Latin, but I mostly chose it because I think it sounds better and can be communicated with more clarity. People more commonly associate sept- with 7 then hept-.
Q: This reminds me of a webcomic I saw once
A: Obligatory xkcd 927
Q: I'm not convinced we should use balanced ternary as the source of truth. Why did you pick that?
A: See my page on ternary