slug: heximal
title: Heximal
extends ../../views/layout.pug
append presets
- hasSidenotes = true
mixin xn(num)
if block
strong.heximal.numeric
block
else
strong.heximal.numeric= num
mixin x(num)
if block
strong.heximal
block
else
strong.heximal= num
mixin dn(num, brackets)
if block
i.decimal.numeric
block
else
i.decimal.numeric= num
mixin d(num)
if block
i.decimal
block
else
i.decimal= num
mixin decexp(base, power, brackets, hover)
- let bracks = ['', '']
if brackets
- bracks = ['(', ')']
if hover
i.decimal.numeric
| #{bracks[0]}
abbr(title=`${hover}`) #{base}×10#[sup #{power}]
| #{bracks[1]}
else
i.decimal.numeric #{bracks[0]}#{base}×10#[sup #{power}]#{bracks[1]}
append cosmetics
link(href="/heximal/heximal.css", rel="stylesheet")
block header
h1 Heximal #[small Or, how to #[em really] read hexadecimal]
block content
p Many debates have been had about the “correct” way to pronounce hexadecimal numbers. (If you ask me, you should just stick to the standard and go with the Nato spelling alphabet: alpha, bravo, charlie…) But what if you don’t want to just #[em read] hexadecimal? What if you want to… count?
p A great number of brave souls have tried, but more often than not, their attempts turn out utter nonsense. #[i Christeen], #[i dickety-one], and #[i fimteek] are just some of the horrors found in existing ideas for hexadecimal numbering. Armed with inspiration from the base-6 #[a(href='https://www.seximal.net') seximal], i set out to make a better system. Introducing: #[strong heximal].
+h2('Counting from 1–F')
p Counting from #[+xn 0]#[+sn('0')] to #[+xn C] is easy:
+sn('0')
p I’ll be using #[+x glowing green text] to indicate heximal numbers, with #[+d darker italics] for their decimal#[+sn('1')] equivalents.
+sn('1')
p It’s technically meant to be “denary”, but who’s counting?
+table
thead
tr
th Number
th Word
tbody
tr
td: +xn 1
td one
tr
td: +xn 2
td two
tr
td: +xn 3
td three
tr
td: +xn 4
td four
tr
td: +xn 5
td five
tr
td: +xn 6
td six
tr
td: +xn 7
td seven
tr
td: +xn 8
td eight
tr
td: +xn 9
td nine
tr
td #[+xn A] #[+dn("(10)")]
td ten
tr
td #[+xn B] #[+dn("(11)")]
td eleven
tr
td #[+xn C] #[+dn("(12)")]
td twelve
p Where we go from here is a challenge. Given that this is base #[+d sixteen], we can’t exactly say #[i #[+d thirteen]], #[i #[+d fourteen]], or #[i #[+d fifteen]]; instead, we can shorten the letters of the Nato spelling alphabet: #[+x del] from #[i delta], #[+x eck] or #[+x ech]#[+sn('2')] from #[i echo], and #[+x fox] from #[i foxtrot].
+sn('2')
p “Eck” can get confusing when mixed in with all those hex-es and sex-es; #[i ech] is thus provided as an alternative, said with the hard #[i ch] sound of #[i loch] and #[i Channukah].
+table
thead
th Number
th Word
tbody
tr
td #[+xn D] #[+dn(`(13)`)]
td del
tr
td #[+xn E] #[+dn(`(14)`)]
td eck #[i or] ech
tr
td #[+xn F] #[+dn(`(15)`)]
td fox
+h2('10 to FF')
p #[+xn 10] is called #[+x hex], and as in any sensible system, right after that comes #[+x hex-one].
+table
thead
th Number
th Word
tbody
tr
td #[+xn 10] #[+dn('(16)')]
td hex
tr
td #[+xn 11] #[+dn('(17)')]
td hex-one
tr
td #[+xn 12] #[+dn('(18)')]
td hex-two
tr
td #[+xn 13] #[+dn('(19)')]
td hex-three
tr
td(colspan='2' lang='la')
i Et cetera…
tr
td #[+xn 1F] #[+dn('(31)')]
td hex-fox
p Numbering continues along the same lines as decimal’s #[i #[+d('-ty')]], with the relevant suffix being #[i #[+x('-ex')]].
+table
thead
tr
th Number
th Word
tbody
tr
td #[+xn 20] #[+dn('(32)')]
td twennex
tr
td #[+xn 21] #[+dn('(33)')]
td twennex-one
tr
td #[+xn 30] #[+dn('(48)')]
td thirtex
tr
td #[+xn 40] #[+dn('(64)')]
td fourex
tr
td #[+xn 50] #[+dn('(80)')]
td fiffex
tr
td #[+xn 60] #[+dn('(96)')]
td sixex
tr
td #[+xn 69] #[+dn('(105)')]
td sixex-nine#[+sn('3')]
tr
td #[+xn 70] #[+dn('(112)')]
td sevenex
tr
td #[+xn 80] #[+dn('(128)')]
td eightex
tr
td #[+xn 90] #[+dn('(144)')]
td ninex
tr
td #[+xn A0] #[+dn('(160)')]
td tennex
tr
td #[+xn B0] #[+dn('(176)')]
td elevex
tr
td #[+xn C0] #[+dn('(192)')]
td twelvex
tr
td #[+xn D0] #[+dn('(208)')]
td deltex
tr
td #[+xn E0] #[+dn('(224)')]
td eckex #[i or] echex
tr
td #[+xn F0] #[+dn('(240)')]
td foxex
tr
td #[+xn FF] #[+dn('(255)')]
td foxex-fox
+sn('3')
p Yes, you #[em do] have to call it this when using heximal.
+h2('Higher and higher')
p The logical term for a value of #[+xn 100] is — what else? — a #[+x byte].
+table
thead
tr
th Number
th Word
tbody
tr
td #[+xn 100] #[+dn('(256)')]
td one byte
tr
td #[+xn 3E8] #[+dn('(1000)')]
td three byte eckex-eight
tr
td #[+xn 7E7] #[+dn('(2023)')]
td seven byte eckex-seven
tr
td #[+xn 1000] #[+dn('(4096)')]
td hex byte
tr
td #[+xn 2710] #[+dn('(10,000)')]
td twennex-seven byte hex
p Programming languages which particularly concern themselves with memory like to call any number below #[+xn 10#[sup 4]] a #[+x short], a term we’ll appropriate for our own evil purposes.
+table
thead
tr
th Number
th Word
tbody
tr
td #[+xn 1,0000] #[+dn('(65,536)')]
td one short
tr
td #[+xn F,4240] #[+decexp('1.00','6',true,'1 million')]
td fox short fourex-two byte fourex
tr
td #[+xn 10B,000] #[+decexp('1.75','7',true,'17.5 million')]
td one byte twelve short#[+sn('4')]
tr
td #[+xn 13C9,0000] #[+decexp('3.32','8',true,'332 million')]
td hex-three byte twelvex-nine short#[+sn('5')]
tr
td #[+xn 3B9A,CA00] #[+decexp('1.00','9',true,'1 billion')]
td thirtex-eleven byte ninex-ten short…
+sn('4')
p The total population of the Netherlands.
+sn('5')
p The total population of the United States.
p Building upon #[i #[+x short]] in the manner of decimal’s #[i #[+d -illion]] series, we can reach some truly dizzying mathematical heights…
+table
thead
tr
th Number
th Word
th In decimal
tbody
tr
td: +xn 10#[sup 8]
td one bort
td: +decexp('4.29','9',false,'4.29 billion')
tr
td: +xn 1.DF×10#[sup 8]
td one bort, deltex-fox byte short#[+sn('6')]
td: +decexp('8.03','9',false,'8.03 billion')
tr
td: +xn 10#[sup C]
td one trort
td: +decexp('2.80','14',false,'280 trillion')
tr
td: +xn 10#[sup 10]
td one quadrort
td: +decexp('1.84','19',false,'18.4 quintillion')
tr
td: +xn 2.58×10#[sup 10]
td two quadrort, fiffex-eight byte trort#[+sn('7')]
td: +decexp('4.33','19',false,'43.3 quintillion')
tr
td: +xn 7.F8×10#[sup 13]
td seven byte fox-eight quadrort#[+sn('8')]
td: +decexp('6.02','23',false,'602 sextillion')
tr
td: +xn 10#[sup 14]
td one quinort
td: +decexp('1.21','24',false,'1.21 septillion')
tr
td: +xn 10#[sup 18]
td one sexort
td: +decexp('7.92','28',false,'79.2 octillion')
tr
td: +xn 10#[sup 1C]
td one septort
td: +decexp('5.19','33',false,'5.19 decillion')
tr
td: +xn 10#[sup 20]
td one octort
td: +decexp('3.40','38',false,'340 undecillion')
tr
td: +xn 10#[sup 24]
td one nonort
td: +decexp('2.23','43',false,'22.3 tredecillion')
tr
td: +xn 10#[sup 28]
td one decort
td: +decexp('1.46','48',false,'1.46 quindecillion')
tr
td: +xn 10#[sup 2C]
td one elevort
td: +decexp('9.58','52',false,'95.8 sexdecillion')
tr
td: +xn 10#[sup 30]
td one dozenort
td: +decexp('6.28','57',false,'6.28 octodecillion')
tr
td: +xn 10#[sup 34]
td one deltort
td: +decexp('4.11','62',false,'411 novemdecillion')
tr
td: +xn 10#[sup 38]
td one eckort #[i or] echort
td: +decexp('2.70','67',false,'27 unvigintillion')
tr
td: +xn 10#[sup 3C]
td one foxort
td: +decexp('1.77','72',false,'1.77 trevigintillion')
tr
td: +xn 10#[sup 40]
td one hexort
td: +decexp('1.16','77',false,'116 quattuorvigintillion')
tr
td: +xn 10#[sup 44]
td one hexishort
td: +decexp('7.59','81',false,'7.59 sexvigintillion')
tr
td: +xn 10#[sup 48]
td one hexibort
td: +decexp('4.97','86',false,'497 septemvigintillion')
tr
td: +xn 10#[sup 80]
td one bihexort
td: +decexp('1.34','154',false,'13.4 quinquagintillion')
tr
td: +xn 10#[sup C0]
td one trihexort
td: +decexp('1.55','231',false,'1.55… septemseptuagintillion?')
tr
td: +xn 10#[sup 100]
td one quadrihexort #[i or] one hexgol
td: +decexp('1.80','308',false,'180 thousand centillion')
tr
td: +xn 10#[sup 400]
td one bytort
td: +decexp('1.04','1233',false,'Beats me, mate.')
tr
td: +xn 10#[sup 4000]
td one hexibytort
td: +decexp('2.00','19,278',false,'Do you think God stays in heaven because he, too, lives in fear of what he’s created?')
+sn('6')
p The total population of the whole world (give or take).
+sn('7')
p The number of ways you can scramble a Rubik’s cube.
+sn('8')
p #[a(href='https://en.wikipedia.org/wiki/Avogadro_constant') Avogadro’s number]: the amount of atoms in just #[+d twelve] mere grammes of carbon.
p I’ve decided to end the naming scheme just short (heh) of what would otherwise be a "shortort", to save it from collapsing in on itself. This means that the largest named number is… [#[i inhales]]
+table
thead
tr
th Number
th Word
th In decimal
tbody
tr
td: +xn 10#[sup 40,000]−1
td foxex-fox byte foxex-fox foxihexifoxibytifoxihexifoxort, foxex-fox byte foxex-fox foxikayfoxibytifoxihexeckort, […] foxex-fox byte foxex-fox
td: +decexp('6.74', '315,652', false)
p …Oh, go on then. Two more.
+table
thead
tr
th Number
th Word
th In decimal
tbody
tr
td: +xn 10#[sup 10#[sup 100]]
td One hexgolplex
td: i.decimal.numeric 10#[sup 2.16×10#[sup 308]]
tr
td: +xn 10#[sup 10#[sup 10#[sup 100]]]
td One hexgolplexian
td: i.decimal.numeric 10#[sup 10#[sup 2.16×10#[sup 308]]]
block timestamps
ul.footer-timestamps
li #{tr('pan.pageHistory.created')(pageCreated).replace(/[0-9]+/g, match => parseInt(match).toString(16).toUpperCase())}
if pageTranslated
li #{tr('pan.pageHistory.translated')(pageTranslated).replace(/[0-9]+/g, match => parseInt(match).toString(16).toUpperCase())}
if pageUpdated
li #{tr('pan.pageHistory.updated')(pageUpdated).replace(/[0-9]+/g, match => parseInt(match).toString(16).toUpperCase())}