Hacker News new | ask | show | jobs
by revertmean 1119 days ago
Interesting to me:

"So far as I know, the only person who has attempted to explain Harriot’s transition from weighing experiments to the invention of binary is Donald E. Knuth, who writes"

It's amazing how the name of Knuth pops up in such a variety of different subjects!

2 comments

To be fair, binary is foundational to computer programming so I would expect to find Knuth there.
I wouldn't, just because it's so long ago. It's like reading, "the only person who has attempted to build Babbage's Difference Engine is Donald E. Knuth"!
> just because it's so long ago.

That's precisely why I would expect him the most. If anyone would dig deep into the history of mathematics to find and understand all of the origins of fundamental concepts in computer science, it's Knuth.

I think that the only reason this sentence isn’t part of the literature is that DEK is more of a software guy than a hardware guy.
Mostly because he's a writer.
it seems inevitable to me that someone would invent binary, or ternary, or likely nonary

bases are just the number of symbols you’re allowed to use to represent a number. so base 10 has ten symbols: 0123456789. base 2 has two symbols: 01, base 3 three: 012, etc etc.

someone will eventually look at a system with 10 symbols and think “what if we have x symbols instead of 10?”

once you realise the basic mechanism through which decimal represents a number - i.e. you can write any natural number as “some y multiples of x + [a number z between 0 and x-1]” - with a bit of nesting you can derive any number of any base

take 1327. let’s write it in base 9. the way I would do this is to write 1327 in the form:

xy + z = 9y + [0,8]

then if y != 0, we rewrite y itself in this form, then again with each new y, until y = 0. each z we produce is the next most significant digit in the answer. when y=0, the z produced is the most significant digit

1327 = 9147 + 4. so our number ends with 4

y=147 is not 0, so we do 147 = 169 + 3. so our number ends with 34

y=16 is not 0, so we do 16 = 19 + 7. our number ends with 734.

y=1 is not 0, so we do 1 = 0*9 + 1. our number ends with 1734

y=0 is 0 so we terminate and our number is 1734

you can do this with any number and any base as long as you have the symbols for it

unable to edit it now, but where the text switches to italic there’s meant to be a "*"