バベッジのディファレンスエンジン

logやsineなどの関数は区間を区切って数式のように多項式で近似する。これを、まず、an×X+an-1を計算し、それにXを掛けてan-2 を加えてan×X2+an-1×X+an-2というように計算しても良いのであるが、この方法では、毎回、積と和の計算が必要になる。

この多項式をマクローリン展開すると、

マクローリン展開

と表される。

ここで、f(0)、f(Δ)、f(2Δ)、…f(nΔ)を計算し、次に、f'(0)=f(Δ)-f(0)、f'(Δ)=f(2Δ)-f(Δ)、…のように隣接した2項の差分で1次微係数を計算する。さらに、f''(0)=f'(Δ)-f'(0)、f''(Δ)=f'(2Δ)-f'(Δ)、…と2次微係数を計算するという計算を繰り返すと、n次多項式の場合は、n回目の差分は定数になる。

これを使って、逆に、f((n+1)Δ)をf(nΔ)+f'(nΔ)、f'(nΔ)をf'(nΔ)+f''(nΔ)、…と順に差分の和として表わして、 n階目の差分からスタートして、n-1階目の差分を加えるという風に計算すれば、加算だけで次々と多項式の値を計算できる。この計算法を階差計算という。当時の数表の計算には、この階差計算が使われていた。

1822年に、この階差計算を使って、多項式を計算する機械式のコンピュータの開発を提案したのが、Charles Babbage(チャールズ・バベッジ)である。英国王室(当時の政府)から1万7000ポンド(現在の価値では5000万円程度か)の予算がついて開発を行ったとのことであるから、現代で言えば国家のフラグシップスパコンの開発のような位置づけの事業であったと思われる。しかし、予算を大幅に超過してもマシンは完成せず、1842年に英国政府は開発中止を決定した。

バベッジは、このDifference Engine No.1の設計を改良し、1847年から1848年にかけて、部品数を1/3に減らしたDifference Engine No.2 を設計したが、マシンを完成することはできず、本当に動く設計になっているのかどうかは不明であった。

バベッジの生誕200年に合わせて、ロンドンのScience Museumが、1989年から1991年に掛けて、バベッジの設計に基づいてこのDifference Engine No.2を建造した。1990年ごろの数値制御の旋盤は、1μm以下の加工精度を持っていたが、バベッジの時代の25μm程度の加工精度と合わせるように、仕上がり寸法をばらつかせるという凝りようで、バベッジの時代の加工精度を再現して製造を行った。図1.4にComputer History Museumに展示されていたDifference Engine No.2の2号機の写真を示す。なお、この2号機はMicrosoftの創立者の1人であるNathan Mihrvold氏が自費で製造を依頼したもので、2016年の1月まではComputer History Museumに展示されていたが、現在はMihrvold氏が創立したシアトルのIntellectual Ventures社のロビーに展示されている。

  • Computer History Museumに展示されていたDifference Engine No.2の2号機

    図1.4 Computer History Museumに展示されていたDifference Engine No.2の2号機

このマシンは、10進31桁の数字を扱うことが出来るカラムを7本持っており、7次の多項式の計算を行うことができる。Computer History Museumで行っていたデモンストレーションでは、31桁の内の下5桁に係数を記憶し、上の26桁が次々と値を計算していくアキュムレータとして使われていた。

このマシンの製作に当たってバベッジの設計から必要となった修正は、手回しのハンドルが重すぎて人力では廻せず、4:1の減速ギアを付け加えるという変更だけで、バベッジの設計は正しかったことが確認された。

  • Difference Engine No.2のハンドルを回すボランティアのオペレータ

    図1.5 Difference Engine No.2のハンドルを回すボランティアのオペレータ

計算間違いだけでなく、活字の拾い間違いも数表作成の大きな問題であったので、Difference Engine No.2は自動のプリンタを備えている。このプリンタは計算結果を紙に印字することもできたが、柔らかい状態の石膏に活字を押し付けて石膏の凹版を作り、そこに鉛を流し込んで、凸版を作ることができるようになっていた。次の図1.6の写真の印字紙のロールの下に見えるのが、柔らかい状態の石膏を入れるトレイである。

  • ifference Engine No.2のプリンタ部

    図1.6 Difference Engine No.2のプリンタ部。右側の計算カラムの結果を横方向のロッドで伝え、活字ドラムを回転させて、結果の数字を選択して印字するプリンタ

Difference Engine No.2を構成する部品数は約8000点で、その内の半分以上がプリンタの部品であるという。

これよりも小型のDifference Engineは何台か作られたようであるが、非常に高価でもあり、コンピュータとして普及することは無かった。

メカニカルな計算機械は製造が難しく、複雑なものが作れないし、計算も遅いことからあまり発展せず、次の飛躍が訪れるのは電気機械式の処理装置が作られるようになった1940年頃に訪れることになった。

ドイツ軍のエニグマは、接点間に不規則な配線を持った3~4枚のローターを使って文字を置き換えて暗号に変換する暗号器であった。キーボードから入力された文字を3枚のローターの接続で、別の文字に置き換えて、キーボードの奥にあるアルファベットごとのランプで表示する。この暗号は、同じローターを同じ位置に設定して、キーボードから暗号文を入力すれば簡単に平文に戻すことができた。

  • エニグマ暗号装置

    図1.7 エニグマ暗号装置。キーボードと表示ランプの奥にある3本の白い縦の筋のように見えるのがローターである (Computer History Museumで筆者が撮影)

しかし、ローターは何枚も用意されており、どの接続のローターが使われているか、それらのローターがどの位置であるかは通信ごとに変更される。また、前面に見えるパッチボードで接続を変えることもできた。このようにバリエーションが膨大なため、容易には解読することが出来なかった。

このエニグマ暗号を解読するために、英国のAlan Turing(アラン・チューリング)が開発した電気機械式のマシンがTuring Bombe(チューリング ボムべ)である。出現するアルファベットの頻度などから、どのローターが使われ、どの初期位置である可能性が高いかをしらみつぶしに評価して、暗号解読の糸口を見つける電気機械式のマシンであった。また、暗号の解読には、ドイツ軍の通信兵が、ローターの初期位置の指定にはガールフレンドの名前を使うことが多いことなども参考にされていたという。

また、ドイツ軍の司令部間の通信に使われたより複雑なローレンツ暗号を解くために、真空管を使った電子式のColossusという暗号解読システムが英国で開発された。これらの装置を用いたドイツ軍の暗号解読で、ヨーロッパでの戦争の終結は、数年、早くなったと言われている。

米国では、初の電子式デジタルコンピュータであるABC(Atanasoff Berry Computer)が1942年に作られている。また、ドイツのKonrad Zuse(コンラッド・ツーゼ)は電話交換機のリレーを使う電気機械式のプログラマブルなコンピュータZ3を開発している。

しかし、次の世代の幕を開けるスーパーコンピュータは、何と言っても、ENIACである。

(次回は12月29日に掲載します)