「諸概念の迷宮(Things got frantic)」用語集

本編で頻繁に使うロジックと関連用語のまとめ。

【コンピューター化に至るまでの数理モデルの歴史】対数表を利用しての掛け算と割り算

 

 「数学 イラストや」の画像検索結果

電子計算機が誕生する以前、高度な計算を担っていたのが対数表です。我が国では丸善の対数表が有名です。

現在もなお高校数学の教科書の後ろに対数表は掲載されていますが、使う機会はほとんどなくなってしまいました。

f:id:ochimusha01:20190209211629j:plain

R言語による「2の乗数表」の生成。

#R言語による「2の乗数表」の生成

Numbers=c(0:16)
Results=c(2^(0:16))
Two_of_the_multiplier<-data.frame(Numbers,Results)
#生成された「2の乗数表」の内容
print(Two_of_the_multiplier)
f:id:ochimusha01:20190210190941p:plain
#「2の乗数表」のグラフ化plot(Two_of_the_multiplier,type="S",main="Two of the multiplier")
f:id:ochimusha01:20190210191108p:plain

 上の表を使った「掛け算を足し算に変換しての計算」。

#まずは計算結果を確認。
8*32
[1] 256

#この方式を逐次的にに記述すると…

Two_of_the_multiplier[Two_of_the_multiplier$Results==8, 1]
#①まずDataframeからResultsに8が収録されてるデータのNumbersを取り出す。

[1] 3

Two_of_the_multiplier[Two_of_the_multiplier$Results==32, 1]

#②次いでDataframeからResultsに32が収録されてるデータのNumbersを取り出す。

[1] 5

3+5

#③両者を加算する(かくしてResults間の掛け算がNumbers間の足し算に)。

 [1] 8

Two_of_the_multiplier[Two_of_the_multiplier$Numbers==8, 2]
#④加算された数字がNumbersに収録されたResultの値を取り出す。
[1] 256

#⑤連続して記述しても結果は同じ。

Two_of_the_multiplier[Two_of_the_multiplier$Numbers==Two_of_the_multiplier[Two_of_the_multiplier$Results==8, 1]+Two_of_the_multiplier[Two_of_the_multiplier$Results==32, 1], 2]

[1] 256

#せっかくだから関数化してみる。

Multiplication_with_multiplier_table<- function(x,y) {
Two_of_the_multiplier[Two_of_the_multiplier$Numbers==Two_of_the_multiplier[Two_of_the_multiplier$Results==x, 1]+Two_of_the_multiplier[Two_of_the_multiplier$Results==y, 1], 2]
}

#関数化した以上、実行してみる。
Multiplication_with_multiplier_table(8,32)
[1] 256

Multiplication_with_multiplier_table(64,128)
[1] 8192

Multiplication_with_multiplier_table(16,64)
[1] 1024

Multiplication_with_multiplier_table(128,256)
[1] 32768

現在はもっと効率的な計算方法が開発済み。「過去の遺物」と笑うのは簡単ですが、こうやって人類は使えるアルゴリズムを地道に一つずつ増やしきたのです。そして当然、ここに至る過程にすら歴史が存在します。かくして「ネイピアの骨Napier's bones)」のジョン・ネイピアJohn Napier, 1550年〜1617年)登場。2進法演算を体系化したゴットフリート・ライプニッツGottfried Wilhelm Leibniz, 1646年〜1716年)と並ぶ「コンピューターの父祖」の一人…

対数(logarithm) - Wikipedia

ある数 x を数 b の冪乗 bp として表した場合の冪指数 p である。この p は「底を b とする x の対数logarithm of x to base b; base b logarithm of x)」と呼ばれ、通常は logb x と書き表される。また、対数 logb x に対する x は真数(Antilogarithm)と呼ばれる。数 x に対応する対数を与える関数を考えることができ、そのような関数を対数関数と呼ぶ。対数関数は通常 log と表される。

  • 通常の対数 logb x は真数 x, 底 b を実数として定義されるが、実数の対数からの類推により、複素数や行列などの様々な数に対してその対数が定義されている。

  • 実数の対数 logb x は、底 b が 1 でない正数であり (b ≠ 1, b > 0)、真数 x が正数である場合 (x > 0)について定義される。 これらの条件を満たす対数は、ある x と b の組に対してただ一つに定まる。

  • 実数の対数関数 logb x は底 b に対する指数関数 bx の逆関数である。この性質はしばしば対数関数の定義として用いられるが、歴史的には対数の出現の方が指数関数よりも先である。

1 以外の正の実数であれば底に何を用いてもよいが、分野によって慣例的によく用いられる底があり、底が省略されることも多い。log x のように底が省略されている場合は、前後の文脈や扱われている分野によって底がいくつであるかを判断する。

  • 底を a = 10 とした対数は常用対数(common logarithm)あるいはブリッグスの対数(Briggsian logarithm)と呼ばれ、実験などの測定値に用いることが多い。ヘンリー・ブリッグスは、1617年に 1000 未満の整数について8桁、1624年には1~2万と9万~10万の整数についての14桁の常用対数表を出版した。他の対数と区別するために、"Log" のように大文字を用いたり、"lg" という記号を用いることがある(ISO 31/XI では "lg" となっているが、"lg" は二進対数の表記でもしばしば使用される)。

  • 底を a = e(ネイピア数) とした対数を自然対数(natural logarithm)あるいはネイピアの対数(Napierian logarithm)という。ジョン・ネイピアの名前がとられているが、ネイピア自身が計算に用いた定義は現在の自然対数とは異なる。微積分などの計算が簡単になるため、数学などの理論分野で用いられることが多い。他の対数と区別するために "ln" という記号を用いることがある。

  • 底を a = 2 とした対数は二進対数(binary logarithm)といい、情報理論の分野で情報量などを表現するのに用いられることが多い。また、音楽の分野においても、1オクターブとは周波数比 1:2 のことであり、さらに、平均律においては半音が周波数比 1:21/12、全音が周波数比 1:22/12 と定義されているため、二進対数を用いると計算が簡便になる。他の対数と区別するために "lb" という記号を用いることがある (ISO 31/XI)。また二進対数では"lg n"と表記されることがよくある。

立派な人間が労働者のように計算などという誰でもできることに時間をとられるのは無駄だ。機械が使えたら誰か他の者にやらせるのに」と日頃から豪語していたゴットフリート・ライプニッツGottfried Wilhelm Leibniz, 1646年〜1716年)自身は二進法の提唱者でもあり、今日のコンピュータは全て二進法に基づいて動作しているが、機械式計算機の技術史上は(十進法式で動作するパスカルのPascaline(1642年〜1652年)に段付歯車機構を組み込んで乗除算を直接計算できるようにした Stepped Reckoner の発明者として名を残している。その影響で1940年代ごろまで、計算機は十進法を使っていることが多かったのであった(チャールズ・バベッジの1822年の機関や1945年のENIACなど。ENIACのリングカウンタは機械式計算機の数字歯車の動きをエミュレートしたものだった)。

対数表はJ. Napier(1550年〜1617年)が作り上げた数表で、掛け算を足し算に変えてしまうための表です。このアイデアは桁数の大きい計算が必要となる、航海術や天文計算を簡単に行うため考えだされました。10x=p逆関数log10p=xのことをpの「常用対数」と呼び、pに対応するxの値を表にしたものを「常用対数表」と呼びます。
f:id:ochimusha01:20190205180815j:plain

この方法が便利であるのは1,034×2,213×3,256×4,378のように掛け算を何度も繰り返す計算がlog10(1,034)+log10(2,213)+log10(3,256)+log10(4,378)という足し算に置き換わることです。

#R言語による「常用対数表」の生成(行は小数点2桁、列は小数点4桁で丸め)
Numbers<-c(seq(1.0,10.0, by = 0.01))
Results<-c(round(log10(Numbers),digits =4))
Common_use_table_of_logarithms<-data.frame(Numbers,Results)

 #生成された「常用対数表」の内容
print(Common_use_table_of_logarithms)

f:id:ochimusha01:20190210215213p:plain

#生成された「常用対数表」のグラフ化plot(Common_use_table_of_logarithms,type="S",main="Common_use_table_of_logarithms")

f:id:ochimusha01:20190210225155p:plain

#この表を使って実際に計算してみる。例えば1.43×5.93。まずは計算結果を確認。
1.43*5.93
[1] 8.4799

#①とりあえずlog10(1.43)を求める。Numbersに1.43が収録されてる列のResultから0.1553が取り出される。

Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.43, 2]
[1] 0.1553

#②次いで log10(5.93)を求める。Numbersに5.93が収録されてる列のResultから0.7731が取り出される。

Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==5.93, 2]
[1] 0.7731 

#③ 0.1553と0.7731を合計すると0.9284。Resultにこれに最も近い数字がDataframeの収録されている(数表上でそれと同じか上の数値が収納された最初の列の)Numbersが8.48となる。

0.1553+0.7731
[1] 0.9284 

 x<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Results>=0.9284, 1]
 x[1]
[1] 8.48
#ここまでを関数化してみる。

Multiplication_with_multiplier_table_simple<- function(x,y) {
d<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Results>=Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.43,2]+Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==5.93, 2], 1]
return(d[1])
}
Multiplication_with_multiplier_table_simple(1.43, 5.93)

[1] 8.48
次は1,034×2,213を計算してみる。こちらもまずは計算結果を確認。
1034*2213

[1] 2288242

#①まずは log10(1034)を求める。

log10(1034)
[1] 3.014521

#「手計算」には人間に理解しやすくするテクニックが盛り込まれている。log10(10)=1, log10(100)=2,log10(1,000)=3, log10(10,000)=4だから、まずは3+log10(1.034)の形に変換。

round(log10(1034), digit=0)
[1] 3

 

さらに1.034を1.03に丸める事でDataframeからNumbersに1.03が収録されてる列のResultから0.0128が取り出せる。合計すると3.0128。

Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.03, 1]

[1] 0.0128

#②次いで log10(2213)を求める。

log10(2213)
 [1] 3.344981
#同様にまずはlog10(3+2.213)の形に変換。さらに2.213を2.21に丸める事でやっとDataframeからNumbersに2.21が収録されている列のResultから0.3444が取り出せる。合計すると3.3444。
Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==2.21, 2]
[1] 0.3444
#③3.0128と3.3444を合計すると6.3572となる。ここでlog10(1,000,000)=6を分離し、残りの0.3572に最も近い数字がDataframeのResultに収録されている(数表上でそれと同じか上の数値が収納された最初の列の)Numbersは2.28なので得られる答えは2.28の10の6乗、すなわち2,280,000となる。

10^6.3572
[1] 2276145

x<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Result=>2.21, 2]
x[1]
[1] 2.28

2.28*10^6
[1] 2280000

#壮絶な桁あふれとの戦い。人間にとって分かりやすい算出方法と数理モデル上の適正アルゴリズムとの衝突。こうなると到底、関数化なんて不可能。

*味気ないので行も小数点4桁に拡大してみる。これで必要計算量は100倍に。

#R言語による「拡張常用対数表」の生成(行は小数点4桁、列は小数点4桁で丸め)
Numbers<-c(seq(1.0,10.0, by = 0.001))
Results<-c(round(log10(Numbers),digits =4))
Common_use_table_of_logarithms<-data.frame(Numbers,Results)

 #生成された「常用対数表」の内容
print(Common_use_table_of_logarithms)

f:id:ochimusha01:20190213205130p:plain

#生成された「常用対数表」のグラフ化plot(Common_use_table_of_logarithms,type="S",main="Common_use_table_of_logarithms")

f:id:ochimusha01:20190213205311p:plain
*手計算の時代ならこの思いつきの為に数百年の歳月が…

 特に桁数の多い三角関数の値同士の掛け算が必要になる天文計算や測量術での利用のため三角関数の対数表x↦log10sin x も作られました。この表を使うと、球面三角法でよく出てくるsinα×sinβ×sinγのような計算を足し算に変えることができます。

要するにこの時代にはまだまだ完成品としての「数表」が全てであり、それを算出する専用機たるアナログ・コンピューターはあくまでその補助手段に過ぎなかった次第。

それにしても使われる底が何種類もある辺りがややこしい…

私は言ってしまうと電気系の学生なのですが, データを取れば10の対数を取るし, 微分方程式を解こうとするときにはeを底に取るし, Shannonのエントロピーを計算するときは2を底に取ります. どれも使うし, ノートに注釈なんていちいち書きませんが, これらが混乱することなんて全くありません.

慣れてくるとこんなもの?

 

 

そう、歴史上数理モデルやコンピューター概念についてのパラダイムシフトは「(国家間の競争が全てに最優先された全体主義的体制の支配した総力戦体制時代1910年代後半〜1970年代)」から「(総力戦体制の全体主義性を国家に代わって企業やマスコミが継承しようと試み始める産業至上主義時代1960年代〜????)」への移行期に完全に被さってくるのですね。

ゼロックス社長のデヴィッド・カーンズは、のちにアルトのプレゼンテーションを「テクノロジーの祭典」と呼び、「テクノロジーの未来を見たと誰もが口々に言っており、非常に印象深かった」と振り返っている。だが、プレゼンテーションを終えたPARCのチームは、幹部のそんな熱意などまったく感じなかった。

それどころか、その場で実際に体験できる時間を設けた際、アルトの前に座ってキーボードを操作し、マウスを試していたのは、ゼロックスの幹部ではなく彼らの妻たちだった。キーを打つのは女性事務員の仕事と考えているらしい夫たちは心を動かされた様子もなく、腕組みをして会場の端から遠巻きに眺めているだけだった。

研究員のひとりは、ある幹部役員がこう言ったのを耳にしている。「男であんなに早くキーを打てる人間は見たことがないな」。つまり、明らかに目のつけどころを間違えていたのだ。

実は日本の和算の限界も、それがあくまで趣味の領域の話に過ぎず、本気で「計算の高速化」を追求し続けなかった点に求められるとも。

三角関数は直角三角形に対して考えられる6種類の比の間の関係を扱う三角法がその起源で、角度に比の値を対応させる6種類の関数です。三角法は英語ではtrigonometry といい、三角形の測量という意味です。四千年前の古代エジプトで、すでにその萌芽が見られ、バビロニアギリシア天文学にもその考え方が見られます。6世紀インドで書かれた『アールヤバティーヤ』という本は様々な角度の正弦(sin)値を計算する方法を述べており、はっきりと三角関数としてとらえられています。インドの三角関数がアラビア経由でヨーロッパに伝わったと考えられており、現在使われているsin、cos、tanといった表記法はヨーロッパで考え出されました。

我が国にはオランダ語数学書天文学書や中国に伝わったヨーロッパの数学や天文学の漢訳書(『崇禎暦書』など)を通じて伝わりました。主に天文計算、測量術、航海術で使われ、ヨーロッパの物理学の本に頻出します。三角関数は角度に数字を対応させる関数ですから、角度の概念がないと生まれません。ところが、和算では角度の概念がありませんでした。方角は十二支に対応させて示していましたが、数値化はされていないので、中間の方角を正確に表現できません。角度が使われたのは、天文、測量、航海術の分野においてのみでした。

我が国での最初の三角関数表は建部賢弘(1664年〜1739年)の『算暦雑考』であるといわれます。建部賢弘は円周率の計算を行ったことで有名ですが、その数値を用いて1度毎に(1/2)sin x の値を小数点以下11桁まで計算した半弦表を作りました。建部は1度を1限と呼んでおり、直径が1尺の円で計算しましたので、半弦の長さが(1/2)sin x尺となっています。これに基づいて半背()、矢、半弦の長さを1限おきに計算した表を作りましたが、この本は佐藤健一建部賢弘の「算暦雑考」1995年)』に復刻されています。


我が国で実際に使われた三角関数表はヨーロッパの三角関数表を漢訳したもので、割円八線表と呼ばれました。八線とは正弦(sin x)、余弦cos x)、正割(sec x=1/cos x)、余割(cosec x=1/sin x)、正接tan x=sin x/cos x=sec x/cosec x)、余接(cot x=1/tan x=cos x/sin x=cosec x/sec x)、正矢(1-cos x)、余矢(1-sin x)の8つの総称。角度の単位は直角を90度としますが、1度を60等分してそれを1分とした表と1度を100等分してそれを1分とした表の2種類があります。森正門の『割円表1857年)』は1度を60分としていますが、渋川景佑(1787年〜1856年)の『新法暦書 続編1846年)』では1度を100分としています。また割円八線表は日本地図作成で有名な伊能忠敬1745年〜1818年)が測量時に携帯していたことでも有名です。

天文学では球面三角法を利用するので、三角関数の掛け算が多く出てきます。この掛け算を足し算に変える三角関数の対数表も作られており、この表も我が国に輸入され、紹介されました。また、三角関数表は円を三等分する弦の長さを求める時に出てくるsin x = ax+b のような超越方程式を解く場合に必要になります。

対数表はJ. Napier(1550年〜1617年)が作り上げた数表で、掛け算を足し算に変えてしまうための表です。このアイデアは桁数の大きい計算が必要となる、航海術や天文計算を簡単に行うため考えだされました。10x=p逆関数log10p=xのことをpの「常用対数」と呼び、pに対応するxの値を表にしたものを「常用対数表」と呼びます。
f:id:ochimusha01:20190205180815j:plain

この方法が便利であるのは1,034×2,213×3,256×4,378のように掛け算を何度も繰り返す計算がlog10(1,034)+log10(2,213)+log10(3,256)+log10(4,378)という足し算に置き換わることです。

#R言語による「常用対数表」の生成(行は小数点2桁、列は小数点4桁で丸め)
>Numbers<-c(seq(1.0,10.0, by = 0.01))
>Results<-c(round(log10(Numbers),digits =4))
>Common_use_table_of_logarithms<-data.frame(Numbers,Results)

 #生成された「常用対数表」の内容
>print(Common_use_table_of_logarithms)

f:id:ochimusha01:20190210215213p:plain

#生成された「常用対数表」のグラフ化>plot(Common_use_table_of_logarithms,type="S",main="Common_use_table_of_logarithms")

f:id:ochimusha01:20190210225155p:plain

#この表を使って実際に計算してみる。例えば1.43×5.93。まずは計算結果を確認。
>1.43*5.93
[1] 8.4799

#①とりあえずlog10(1.43)を求める。Numbersに1.43が収録されてる列のResultから0.1553が取り出される。

>Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.43, 2]
[1] 0.1553

#②次いで log10(5.93)を求める。Numbersに5.93が収録されてる列のResultから0.7731が取り出される。

>Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==5.93, 2]
[1] 0.7731 

#③ 0.1553と0.7731を合計すると0.9284。Resultにこれに最も近い数字がDataframeの収録されている(数表上でそれと同じか上の数値が収納された最初の列の)Numbersが8.48となる。

> 0.1553+0.7731
[1] 0.9284 

> x<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Results>=0.9284, 1]
> x[1]
[1] 8.48
#ここまでを関数化してみる。

>Multiplication_with_multiplier_table_simple<- function(x,y) {
d<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Results>=Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.43,2]+Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==5.93, 2], 1]
return(d[1])
}
>Multiplication_with_multiplier_table_simple(1.43, 5.93)

[1] 8.48
次は1,034×2,213を計算してみる。こちらもまずは計算結果を確認。
>1034*2213

[1] 2288242

#①まずは log10(1034)を求める。

> log10(1034)
[1] 3.014521

#「手計算」には人間に理解しやすくするテクニックが盛り込まれている。log10(10)=1, log10(100)=2,log10(1,000)=3, log10(10,000)=4だから、まずは3+log10(1.034)の形に変換。

>round(log10(1034), digit=0)
[1] 3

test<-function(x){
a<-0
while(a<10){
a<-a+1
}
return(a)
}
[1] 10

test<-function(x){
a<-0

b<-x

if(b<1){
 while(b>1){
 b<-b*10
 a<-a+1

 }

else 

 {

 while(b<1){
 b<-b/10
 a<-a+1

 }}



さらに1.034を1.03に丸める事でDataframeからNumbersに1.03が収録されてる列のResultから0.0128が取り出せる。合計すると3.0128。

>Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==1.03, 1]

[1] 0.0128

#②次いで log10(2213)を求める。

> log10(2213)
 [1] 3.344981
#同様にまずはlog10(3+2.213)の形に変換。さらに2.213を2.21に丸める事でやっとDataframeからNumbersに2.21が収録されている列のResultから0.3444が取り出せる。合計すると3.3444。
>Common_use_table_of_logarithms[Common_use_table_of_logarithms$Numbers==2.21, 2]
[1] 0.3444
#③3.0128と3.3444を合計すると6.3572となる。ここでlog10(1,000,000)=6を分離し、残りの0.3572に最も近い数字がDataframeのResultに収録されている(数表上でそれと同じか上の数値が収納された最初の列の)Numbersは2.28なので得られる答えは2.28の10の6乗、すなわち2,280,000となる。

> 10^6.3572
[1] 2276145

>x<-Common_use_table_of_logarithms[Common_use_table_of_logarithms$Result=>2.21, 2]
>x[1]
[1] 2.28

>2.28*10^6
[1] 2280000

#壮絶な桁あふれとの戦い。人間にとって分かりやすい算出方法と数理モデル上の適正アルゴリズムとの衝突。こうなると到底、関数化なんて不可能。

*味気ないので行も小数点4桁に拡大してみる。これで必要計算量は100倍に。

#R言語による「拡張常用対数表」の生成(行は小数点4桁、列は小数点4桁で丸め)
>Numbers<-c(seq(1.0,10.0, by = 0.001))
>Results<-c(round(log10(Numbers),digits =4))
>Common_use_table_of_logarithms<-data.frame(Numbers,Results)

 #生成された「常用対数表」の内容
>print(Common_use_table_of_logarithms)

f:id:ochimusha01:20190213205130p:plain

#生成された「常用対数表」のグラフ化>plot(Common_use_table_of_logarithms,type="S",main="Common_use_table_of_logarithms")

f:id:ochimusha01:20190213205311p:plain
a<-nchar(as.character(round(1034, digits = 0)))-1
a+1034/10^a
log10(1034)+1+1034/10^(log10(1034)+1)
nchar(as.character(round(1034, digits = 0)))

function(x){

i<=x

j<=0
while(i>1){
i=i*10
j=j+1
}
return(j)}

 特に桁数の多い三角関数の値同士の掛け算が必要になる天文計算や測量術での利用のため三角関数の対数表x↦log10sin x も作られました。この表を使うと、球面三角法でよく出てくるsinα×sinβ×sinγのような計算を足し算に変えることができます。

要するにこの時代にはまだまだ完成品としての「数表」が全てであり、それを算出する専用機たるアナログ・コンピューターはあくまでその補助手段に過ぎなかったのです。

大航海時代の航海術にはサインやコサインの三角法が必須で、三角法も有効数字が10桁以上もある精密なものが作られていましたが、その計算、特にかけ算と割り算が困難を極めたのです。1590年に、ネイピアの友人がある事情でデンマークに行き、ティコ・ブラーエの天文台を見ました。そこで三角法の式を利用して積を和に直す方法(積和の公式)が使われていることを知りネイピアに伝えたところ、彼はこの話に刺激されて対数の研究を始めたそうです。

対数表に関する)正確な答を求めるには、1.000001のようにもっとずっと1に近い数の累乗が必要となる。そうすると表がはるかに長くなり、累乗の数が100万個などになってしまう。その表を作るための計算は、とてつもない大事業となる。しかし1回だけやればいい。誰か自分を犠牲にする恩人が最初にその努力を割いてくれれば、その後の世代は大量の計算をしなくて済むようになるのだ。

チャールズ・バベッジは機械式の自動計算機としては非常に大規模なものを設計し制作。1833年には数表作成用の階差機関の開発からより汎用的な解析機関へと興味を移したが、この時にジャカールのパンチカードをプログラムの表現に使った(ジャカード織機では、カードの穴は経糸の上げ下げを直接示すだけだが、これはコード化である)。

1835年に記されたその解析機関についての記述によれば汎用のプログラム可能なコンピュータであり、入力にはパンチカード、動力源には蒸気機関を採用し、歯車や軸の位置で数値を表すものとされている。元々は対数表を高精度で作成することを目的としていたが、すぐにそれ以外の用途にも使える汎用プログラム可能コンピュータとして構想を発展させたが、機械製作を担当した職人との不和など様々な要因が重なって頓挫。プロジェクトへのイギリス政府の出資も中止となった。

ちなみにこの頃、ジョージ・ゴードン・バイロンの娘エイダ・ラブレスがFederico Luigi, Conte Menabrea の著した "Sketch of the Analytical Engine" を英訳し、大量の注釈を付記している。これが世界初のプログラミングについての出版物とされる。またダブリン出身の会計士 Percy Ludgate はバベッジの業績を知らなかったが、独自にプログラム可能なコンピュータを設計し、1909年に出版した著作にそれを記している。

我々が親しんでいる「カーネルのメインループが全てを制御するコンピューター」登場前夜のエピソード…