One disadvantage of my letter notation (defined here) is that one can't immediately tell how a given number is constructed. For example, it is easy to see immediately that G2.671 is between G2=10↑↑↑2 and G3=10↑↑↑3, but there's no way to make sense of the ".671" without doing an actual calculation:

G2.671 = FF(100.671) ≈ FF4.6881 = FFEEEE(100.6881) ≈ FEEEE4.8768 ≈ FEEE(75298.683) ≈ FEE(4.8185×1075298) = 10↑↑10↑10↑(4.8185×1075298)

My goal in this post is to create an alternative notation which will allow us to see the final result without doing any calculation. Ideally, we also want a notation which can be snipped at any point to get an approximation (just like we can snip G2.671 to get the approximation G2.6)

So instead of G2.671 we'll have something like "G2-4-4-75298-48185..." (with the "75298" representing the 1075298 and the 48185... representing the first digits of this 75299-digit number) which could be snipped to rougher lower bounds like "G2-4-4-75" (10↑↑10↑10↑(1075000)) or "G2-4-4" (10↑↑10↑10↑10↑10↑4) or "G2-4" (10↑↑10↑↑4).

Of-course, I haven't formally defined anything yet. But surprisingly enough, properly defining such a notation is fairly easy. Before I actually define it, however, let's look at a few simple examples of what such a notation should look like.

A Few Simple Examples: Up to 10,000,000,000

Let's start really small. We know that E1=10 and E2=100. How shall we write numbers in between?

A natural choice would be: E1-<the digits of the number>. So for example:

42 = E1-42

With larger numbers, we could do the same thing:

78591 = E4-78591 (because 78591 is between E4=10000 and E5=100000)

And of-course, we can omit trailing zeros to create more concise expressions:

E4-78 = E4-78000 = 78,000

E9-2 = E9-2000000000 = 2,000,000,000

And the biggest integer we can write with this system would be:

E9-9999999999 = 9,999,999,999

(We can't write 1010 as "E10" because that would violate the "snipping" rule: E1 is definitely not an approximation of E10)

More Simple Examples: Up to F3=10↑↑3

To go beyond 1010 will make use of the next letter F.

We already know that F2=10↑↑2=1010 and F3=10↑↑3=1010,000,000,000, So any number in this range should start with:


Well, the exponent here goes from 10 to 10,000,000,000 and we already know how to express those. So we could simply do that after dropping the original E:

Since 11 = E1-11 we could write 1011 as F2-1-11


1012 = F2-1-12

1013 = F2-1-13

1020 = F2-1-20 = F2-1-2

1042 = F2-1-42

10100 = F2-2-100 = F2-2-1

102017 = F2-3-2017

and so on.

So far so good. However, this only takes care of writing exact powers of ten. How do write less round numbers? Well, that's actually very easy: we simply write the actual digits of the number after the power. For example:

1,234,567,890,123 = F2-1-12-1234567890123 (with F2-1-12 being equal to exactly 1,000,000,000,000)

Or Avogadro's number: 6.022E23 = F2-1-23-6022 (with F2-1-23 being equal to exactly 1023)

This can get us all the way up to F2-9-9999999999-9999...99999 (with ten billion 9's in the final set), after which we'll have F3 = 10↑↑3.

Beyond this, things start getting tricky, so perhaps this is a good place to actually define this new notation

The Definition (up to H10)

(1) Given an real positive number x, we define flatten(x) = x*10k for an integer k chosen such that flatten(x) is between 1 and 10


flatten(578174.3) = 5.781743

flatten(0.00035) = 3.5

(2) for a positive integer a and positive real b we evaluate "a-b" (a dash b) as follows:

a-b = a+log10(flatten(b))

(3) Order of operations is from right to left.

And that's it!... Well, sort of. These 3 rules are sufficient to evaluate any number written in this new form. But unfortunately, these rules still don't tell us where to put the dashes for best readability.

For example, we already know that F2-1-23-6022 should evaluate to 6.022×1023 and indeed it does:

F2-1-23-6022 = F2-1-(23+log 6.022) = F2-1-237797407511767405116315755101 = F2-(1+log 2.37797407511767405116315755101) = F2-13762071155918773972849443081 = F(2+log 1.3762071155918773972849443081) = F2.138683799008338197859363706 = EE1.3762071155918773972849443081 = E23.7797407511767405116315755101 = 6.022×1023

(notice how the digit pattern in the second half of the calculation neatly mirrors that of the first half. This is a good sign which shows us we've done everything correctly)

But we could write the same number in many other ways, most of which won't make any intuitive sense. For example: The above number could also be written as F2-137-7928898, but niether the "137" nor the "7928898..." have any useful meaning.

So how do we know where to put the dashes? There are two way to do this: with a formal set of rules, or intuitively. First, I'll present the formal rules (which is actually the hard way do to it, but it leaves no room for errors):

(1) Write the number in Universal Canonical Form (<letter>x where x is a real number between 2 and 10)

(2) Keep the opening letter

(3) Expand the Canonical Form one step at a time, and write the integer values of all the arguments in the intermediate results. Seperate these by dashes.

(4) The expansion of "Ex" is simply the evaluation of 10^x. The number to be put after the dash in this case is the integer part of 10^x.

As an example, let us use Avogadro's number again. By taking its logarithm 3 times, we find that:

6.022×1023 = 10↑10↑10↑0.138683799008338197859363706. So the Universal Canonical Form of this number is F2.138683799008338197859363706.

Now, we evaluate this number step by step:

F2.138683799008338197859363706 = EE1.3762071155918773972849443081 = E23.7797407511767405116315755101 = 602200000000000000000000

Notice the bolded integer parts? We combine them and voila: F2-1-23-6022.

As second example, let's look at the number mentioned at the beginning of this post:

G2.671 = FF4.6881 = FEEEE4.8768 ≈ FEEE(75298.683) ≈ FEE(4.8185×1075298)...

Picking up the bold integer values we get: G2-4-4-75298-48185...

Of-course, this is a really complicated (even if foolproof) way to do this. With a little practice, one can do the entire process quickly and intuitively. Indeed, the ease by which one can learn to read and write such numbers intuitively is the whole point of this notation. Two things to remember here:

(1) Every step of the way serves as an interpolation between two neighboring numbers in the previous step. For example: G2-4-4 is between G2-4 and G2-5.

(2) A dash is never followed by the digit 0. In other words, dashes are used to interpolate between 1 and 10.

Keeping these two pointers in mind, it shouldn't be too difficult to master the use of this system (if you try and still find it cumbesome after some practice, please provide feedback so I can improve my presentation)

The Definition (up to P10)

The above system worked up to H because all the early letters use the same kind of interpolation between 1 and 10.

The letter J, however, introduced an interpolation between 2 and 10 (with the formula 2×5x) and the letter N introduced an interpolation between 0 and 10 (by the simple formula 10x).

For the second case (of N) we don't really need to do anything. Our use of decimal digits already take cares of this kind of interpolation, because when we write a number like "75298" it is already assumed that every digit goes linearly form 0 to 9.

But for J (and its ilk) we need a new seperator, let's say $. Formally, for integer a and real b we can define:

a$b = a+(log5(flatten(b)/2))

And informally, of-course, we'll simply use the "$" seperator whenever we need an smooth curve between 2 and 10. For example:

J5 = 10↑↑↑↑↑10 = 10↑↑↑↑↑↑2 and J6 = 10↑↑↑↑↑↑10

So 10↑↑↑↑↑↑4 = J5$4

And the formal rules of converting numbers from other notations to this one:

(1) Write the number in Universal Canonical Form (<letter>x where x is a real number between 2 and 10)

(2) Keep the opening letter

(3) Expand the Canonical Form one step at a time, and write the integer values of all the arguments in the intermediate results. Any step you've used "10^..." should be seperated by a dash. Any step you've used "2×5^..." should be seperated by a dollar sign. Other steps should be seperated by nothing.

(4) The expansion of "Ex" is simply the evaluation of 10^x (which - given rule (3) - means that the result will come after a dash). The number to be put after the dash in this case is the integer part of 10^x.

And again, these formal rules are the harder way to do it. With little practice, the whole process becomes intuitive, quick and painless.

Graham's Number - an Intuitive approach

Let's try to write Graham's Number in this new notation, without actually following the formal rules.

First, we know that Graham's Number is roughly K64. We also know that L2=K10=KK1 and L3=KK10.

So interpolating between L2 and L3 is equivlaent to writing KKn where n goes from 1 to 10. That's a dash, so:

L2-1 = KK1 = K10

L2-2 = KK2 = KJ10

Now, J10 is still much larger than 64, so we need to interpolate between 10 and J10. But 10=J1 so we have:

L2-1-n = KJn 

and specifically:

L2-1-1 = KJ1 = K10 (again)

L2-1-2 = KF10

F10 is still larger than 64, so Graham is less than L2-1-2. Writing K10 as KF1 we again interpolate with a dash between KF1 and KF10:

L2-1-1-n = KFn

L2-1-1-1 = KF1 = K10 (no change)

L2-1-1-2 = KF2 = KE10 = K(10,000,000,000)

And now we're getting somewhere! We already know how to interpolate between 10 and 10,000,000,000 so we can immediately write:

L2-1-1-1-1 = K10

L2-1-1-1-2 = K100

L2-1-1-1-1-64 = K64

L2-1-1-1-1-65 = K65

For the next digits, we will need to calculate Graham's Number to better precision. This will actually take more work than figuring out how to write the number in our new notation, so I'll just write the end result of that calculation here:

Graham's number ≈ JJJJ...JJJJ(3↑↑↑↑3) ≈ JJJJ...JJJJ(10↑↑↑10↑↑7625597484986) with 63 J's.

Now, using 63 J's, JJJJ...JJJJ(J1) = K64 and JJJJ...JJJ(J10) = K65. Since 3↑↑↑↑3 is obviously between J1 and J10, we do this:

L2-1-1-1-1-64-n = JJJJ...JJJJ(Jn) with 63 J's outside the parens.

We keep zeroing in: 3↑↑↑↑3 is between J3=10↑↑↑10 and J4=10↑↑↑↑10 so:

L2-1-1-1-1-64-3 = JJJJ...JJJJ(10↑↑↑10)

L2-1-1-1-1-64-4 = JJJJ...JJJJ(10↑↑↑↑10)

But 10↑↑↑10 = 10↑↑↑↑2, so we are now interpolating between 2 and 10 and we need the dollar sign:

L2-1-1-1-1-64-3$n = JJJJ...JJJJ(10↑↑↑↑n)

Of-course 3↑↑↑↑3<10↑↑↑↑3 so we now know that Graham is between:

L2-1-1-1-1-64-3$2 = JJJJ...JJJJ(10↑↑↑↑2) = JJJJ...JJJJ(10↑↑↑10↑↑↑1)


L2-1-1-1-1-64-3$3 = JJJJ...JJJJ(10↑↑↑↑3) = JJJJ...JJJJ(10↑↑↑10↑↑↑10)

And recall that we need the number after the J's to be 10↑↑↑10↑↑7625597484986. That's certainly between 10↑↑↑10↑↑↑2 and 10↑↑↑10↑↑↑3 so:

L2-1-1-1-1-64-3$2-2 = JJJJ...JJJJ(10↑↑↑10↑↑↑2) = JJJJ...JJJJ(10↑↑↑10↑↑10)

L2-1-1-1-1-64-3$2-3 = JJJJ...JJJJ(10↑↑↑10↑↑↑3) = JJJJ...JJJJ(10↑↑↑10↑↑10↑↑10)

Well, now all that is left is to interpolate between 10 and 10↑↑10 and get 7625597484986. And we already know how to do that because 7625597484986 = F2-1-12-7625597484986, so we simply append these numbers to what we have so far and get:

Graham's number ≈ L2-1-1-1-1-64-3$2-2-2-1-12-7625597484986

For more digits, we could work out the exact number at the top of that final 7625597484986-level power tower. Again I won't do this calculation here (because it is besides the point) but the end result is that the top number is 12.56090264130030487354 instead of 10:

Graham's number ≈ L2-1-1-1-1-64-3$2-2-2-1-12-7625597484986-1-12

And since 1012.56090264130030487354 ≈ 3638334640023.778 we can continue:

Graham's number ≈ L2-1-1-1-1-64-3$2-2-2-1-12-7625597484986-1-12-3638334640023

Actually, since 0.778 ≈ log 6, this we can do:

Graham's number ≈ L2-1-1-1-1-64-3$2-2-2-1-12-7625597484986-1-12-3638334640023-60...

And if anybody wants to go further, be my guest. You'll want to trim it at some point, however, because the next dash is over 3.6 trillion digits away :-)

At any rate, the above representation of Graham's number tells us lots of useful stuff about it. It also allows us to write - immediately - other numbers of similar size.

Bower's Corporal? Easy: L2-1-1-1-2-100 which can be truncated to L2-1-1-1-2. And if we had 2017 layers of arrows, that would be L2-1-1-1-3-2017.Compare that with the cryptic L2.0175 or even K64.492, and the advantages of this new version are readily apparent.