歯車の最高傑作

先日OldGoodCOMPUTER!!のコーナーで取り上げた解析機関ですが、これは歯車機械ですから、当然「社会の歯車」でも取り上げます。


解析機関は実際に作成されなかったとはいえ、すばらしいアイデアを随所に取り入れた、歯車機関の最高傑作のひとつです。

とはいえ、これらのアイデアも急に出て来たものではありません。ちゃんと前段階として階差機関がありますし、階差機関は試作とはいえ作られているのです。

目次

階差機関 解析機関 解析機関のプログラム


それでは、まず階差機関の構造から見てゆくことにしましょう。


階差機関

歯車に数字を書いておけば、それを回すこと自体が「足し算」になります。この原理は単純ですからだれにでも分かるでしょう。

問題は、桁上がりの複雑さです。

 パスカリーヌ(左図)で使われた方法は、数字の入力(歯車を回すこと)の力を、直接桁上がり機構を動かす動力にしていました。

そのため、999+1等のような、連続桁上がりが起こる局面では非常に大きな力が掛かるようになり、うまく動作しないことが多かったようです。


それに対し、タイガー計算機(右図)の方法は、数字の入力と計算の実行をわけて考えています。そのため、計算の実行時には力を計算だけに使うことが出来ましたし、より複雑な桁上がり機構を用意できたのです。


例えば、桁上がりが発生した時に、つぎの桁が実際に動き始めるまで一瞬の間があるような歯車機構を作れば、連続桁上がりでも力が分散するためにうまく動作するようになります。

このような機構は複雑になるでしょうし、それを動作させるために長時間の動力が必要となりますが、タイガー計算機の様に「クランクを回すと計算が行われる」機構にすれば、その問題も解決するのです。


階差機関でも、そのような機構を使おうとしていたようです。もっとも、最近再現された階差機関では「桁上がり機構に設計ミスがあった」ということで改良が加えられましたから、バベジが想定していた機構がどのようなものであったか私は知りません。

さて、話は戻りますが、パスカリーヌからタイガー計算機への進化の間には、もうひとつ重要な設計変更がありました。

階差機関(試作品) パスカリーヌでは、足す数を直接歯車の角度で指示していたわけですが、タイガー計算機では数字をレバーの位置で指示しているのです。

内部的には、この位置をもとにギアボックスを介して回転角度を指示しているだけなのですが、この設計が無ければ階差機関も作ることは出来なかったでしょう。


階差機関(左図)では、結果表示の歯車の「位置」(表示数値)を、さらに次の階差の計算に使っていたりするのですから。


階差機関では、数値はすぐ隣の階差への入力となります。そのため、数値表示部と計算部が複雑にからみあった構造となっています。

ここまで設計ができれば、あとは歯車の数を増やして、計算できる桁数・階差数を増やしてやれば、階差機関の計算部は出来上がりです。



実現されなかったアイデアですが、バベジは計算結果を活字で組み上げようとしていました。

この仕組みは、300本の活字が納められた箱を10組み(0〜9)用意し、結果に応じて一本ずつ送りだされた活字が、別の箱に並べられてゆくというものです。

このとき、元の箱に間違った活字が紛れ込まないように、使用する活字には、種類ごとに異なる位置に溝が彫られていました。

箱におさめた後で、この溝に針金を通してみて、同じ活字かどうかをチェックするためです。針金がとおらなければ、ちがう活字が紛れ込んでいる可能性があります。


ここまで几帳面に物事を考えるというのも、バベジらしいエピソードではあります。


解析機関

階差機関で計算できた値というのはどのようなものでしょう?

階差という言葉をあまり聞いたことが無い人もいるかも知れませんが、微分を簡単にしたものだと言えば分かってもらえるかも知れません。


階差機関で計算できる数表というのは、「微分をくり返すと、最終的に定数になってしまう式」の数表なのです。平方根、立方根、累乗、などが、そのような式に当たります。

それに対して、三角関数などの「微分すると元に戻る式」や、円周率などの「無理数」は階差機関では計算ができません。しかし、これらの数表を無視するわけには行きません。計算しにくいからこそ、数表を作ることが重要なのです。


そこで、バベジはこれらの数を計算できる装置を考案します。


まず、三角関数です。例えば sin x を4回微分してやると、 sin x になります。ですから、この値を計算するには4次階差を次の加数とする階差数列を作ってやれば良いことになります。

階差機関では、各階差を意味する歯車は、隣り合って一方向に並んでいました。ですから、4次階差を自動的に加数とするような仕組みを作ることはできません。かといって、そのような仕組みをもつ階差機関を作ってしまえば、三角関数の計算以外に全く役に立たない機械になるでしょう。

解析機関(試作品)そこでバベジは、離れた歯車の間を、長い軸・・・ただの針金ですが・・・を持った小さな歯車でつなげるようにした構造を考えます。

これならば、三角関数以外にも、同じように「元に戻ってしまう」関数を計算できます。


試作された解析機関でも、計算部分と記憶部分を繋ぐ針金が縦横無尽に走っているのがわかる。


次に、無理数の計算です。無理数の計算では、非常に多くの数値を、複雑にからめ合いながら計算をすすめる必要があります。

しかし、それらの数値のほとんどは、たびたび計算で呼び出されはするものの、それほど頻繁に計算するわけでは無いのです。


階差機関でも、一番作成に苦労したのは桁上がり機構でした。それほど頻繁に計算しない値のために、桁上がり機構を複数用意するのも無駄な話です。

そこで、バベジは思い切って、階差機関では複数あった計算機構を1つだけにしてしまいました。そして、値を保存するための歯車はたくさん用意して、最初のアイデア・・・長い軸を持った歯車で繋ぐようにしたのです。


こうして出来た機械は、値の記憶部分と、計算部分を分離した構造の機械になります。しかし、これだけでは計算は行なえません。計算部分だけをみると、階差機関よりも性能が悪いのですから。


そこで、どこの値をどのように使用して計算を行うかを指示するために、パンチカードによる制御構造が付け加えられたのです。こうやって作られた解析機関は、階差機関よりも速度は遅いものの、階差機関よりも柔軟な計算を行うことができるようになりました。


解析機関プログラム


注:当時はプログラムのことを「ダイアグラム」と呼びましたが、以下プログラムと呼ぶことにします

解析機関のプログラムには、2組のパンチカードを使いました。

1組は、計算の手順(計算部分「ミル」への命令)をあらわすカード、もうひと組は計算する数値(記憶部分「ストア」への命令)をあらわすカードです。

それぞれのカードは制御カード(Combinatorial Cadrs)、変数カード(Variable Cards)と呼ばれていました。


左は解析機関で使用されたパンチカード。
 カードを使用するアイデアは、ジャカールの作成したジャカード織り機を見てひらめいたらしい。バベジは複雑な模様を織ることのできるこの織り機を気に入り、当時高価だったジャカード織りのタペストリを2枚も購入している。


現在のプログラムというのは、全体で1つの流れになっています。しかし、解析機関では2つの流れからプログラムが作られているのです。

これは、行列の掛け算のような「変数には繰り返しが無いが、計算手順には繰り返しがある」などの場合に効率良くプログラムを行うための工夫でした。


また、演算の結果が最上位桁から桁下げが起こったかどうかによって、プログラムをくり返す(サイクルと呼ばれていました)機構が設けられていました。プログラムはカードによって記憶されていますから、繰り返しはカードを巻き戻す事によって行われます。

繰り返しで戻りたい部分までカードを巻き戻し(現在で言う前方相対ジャンプですね)、ふたたび送ることで実行をくり返せます。


サイクルに入る前にサイクル回数を読み込んでおき、サイクルが終わるごとにこれを1つずつ減らしていきます。

0から1つ減らした時、マイナスになって最上位の桁では桁下げが起こります。これによってサイクルは終了します。


下に示すのは、解析機関で2元連立1次方程式をとくためのダイアグラム(プログラム)として、参考文献[1]に掲載されていた表です。(一部修正)

データのための変数 作業のための変数 結果のための変数
V0 V1 V2 V3 V4 V5 V6 V7 V8 V9V10V11V12V13V14V15 V16
mndm'n'd' dn'-d'n
-------=x
mn'-m'n
d'm-dm'
-------=y
mn'-m'n
×mn'mn'
×nm'm'n
×ddn'
×d'd'n
×d'm
×dm'
mn'-m'n
dn'-d'n
d'm-dm'
÷ dn'-d'n
-------=x
mn'-m'n
÷ d'm-dm'
-------=y
mn'-m'n

まだプログラム言語など概念も無い時代ですので、独特の書かれ方をしています。

・・・というか、これが掲載されていた本ではなんの解説も載っていなかったのですが、おそらくこれはプログラムでは無く、コーディングの際に使ったメモ(もしくは、コーディングの概念を説明する説明図)では無いかと思うのです。


一番上の段にまず「データとして用意される変数」と「計算で得たい結果の式」を書き込んで、それから計算手順を書き込み、コーディング(アルゴリズムを機械で読めるコードに直すこと)を行ったものだと思います。


左端には上から順に計算の種類を記述します。そして、使用する変数に丸を付け、その結果をその左の方、結果を納める変数の下に書き込みます。

最終的に得たい結果まで記述が終われば、コーディングは終了です。

使用する記憶領域(変数)、計算手順は正しく書き出されたことになりますから、あとはこれをパンチカードに移しかえるだけです。


エイダを「世界最初のプログラマ」と呼ぶことがありますが、彼女が組んだオリジナルのプログラムと言うのはそれほど多くありません。

しかし、プログラムの持つ可能性については、非常に深く理解していたようです。


エイダは「メナブレア記録」の訳注で、解析機関が持つ汎用性、プログラムのデバッグ問題、記号処理の問題、繰り返し演算による数値解析、解析機関の知的能力の限界までを解説しています。

しかも、「大脳の現象が数学的な方程式で表せるならば」という条件付きで、人工知能の可能性にまで言及しているのです。

エイダは「ジャカールの織り機が花や葉を織るように、解析機関は代数的なパターンを織る」という有名な比喩を残しています。

 左はジャカード織り機。
 このような織り機を考案したのはジャカールが最初では無く、ジャカールの50年前にフランスのジャック・ド・ヴォーカンソンが発明している。
 ジャカードの功績は、普及しなかったヴォーカンソン織り機を改良し、操作を簡単にし、普及させたことである。
 その際に、長くて不便だった穴空き巻紙にかわり、折り畳んで積み重ねられるパンチカードが考案された。



解析機関は、すでにお伝えしたように作成されることはありませんでした。そして、バベジと解析機関の存在は、一旦歴史の表舞台から消えます。

しかし一部の人はバベジの夢を追いつづけ、その人々が作った機械が、間接的に計算機の時代を開くことになるのです。

ふたたびバベジが注目されたのは計算機時代の幕が明けた後、つい最近になってからなのです。



参考文献
[1]誰がどうやってコンピューターを創ったのか?星野力1995共立出版
[2]バベッジのコンピューター新戸雅章1996筑摩書房

(ページ作成 1998-01-25)

戻る
トップページへ

-- share --

2006

-- follow --




- Reverse Link -