2011年3月18日金曜日

古い計算機

東京理科大学の近代科学資料館で見かけた古い計算機に以下のようなのがあった.




白状するとどのように使うのかさっぱり分からなかった. 仕方なく, あとからウェブでいろいろ探し, やっとChadwick Magic Brain Calculatorの使用法というページを見つけた. そのページのと形は多少違うが, 同じシリーズである. Chadwickという会社製だが, 生産は日本と書くページもあった.

繰上げは人間オペレータに依存する, 実に簡単な仕掛けであった. いわばpoorman's calculatorである. 今回も私流の図で説明しよう. その前に, 最初の写真で, 左端にある針金は, 引き抜くとすべての桁を0にクリアする仕掛けである.




基本は, スタイラスを使ってAのような滑り板を, Bの青枠の操作窓の中で上下に動かす. Bの上右側の緑枠は結果窓である. 左側の結果枠は1桁上のもので, もっと左にあるべきだ. 操作窓の左の1から9は, 黒数字が加算用, 赤数字が減算用である.

十進歯車の役目を果たす滑り板には, 両側にスタイラスを掛ける窪みがある. 左側のが加減算用. 右側のが繰上げ, 繰下げ用である.

ある桁の操作窓には, Cのように, その桁の滑り板(の加減算用の窪み)が右に, その上の桁の滑り板(の繰上げ, 繰下げ用の窪み)が左に現れる. (今は見えないはずの滑り板も描いてある.) それぞれの反対側の窪みは関係ないから, 以後はDのように表わすことにする.

これからの説明は次の図による.




Aは, 緑枠に見るように, この桁と, すぐ上の桁がともに0の状態である. 加算の規則は, 操作窓の左の黒数字に対応する右の窪みにスタイラスを差し, そこが赤なら, 操作窓の下までスタイラスを押し下げる.

BはAの黒字1の窪みのスタイラスを下まで押し下げたところで, 状態1になり, 右の緑窓に1が見える.

CはBにさらに4を足したところだ. (状態は5)

スタイラスを差した場所か白なら, スタイラスの操作窓の上まで押し上げ, さらに左に押して, 上の桁の繰上げ, 繰下げ用の窪みに差し, 操作窓の左縁に沿い, 1段下げる. 操作窓の構造上, 1段しか下がらない. 従って, Cに5を足そうとすると, Cの黒5のところは白だから, 5の窪みを上まで押し上げ, (この桁は0になる.) さらにスタイラスを左に回し, 上の桁を1段下げて1にする. (Dになる.)

なにをやったかを算盤で説明しよう.



Aのように, ある桁が8とする. 1を足すには, 下の1を押し上げる. (Bになる.) Cのように, 8に3を足そうとすると, 11になり, この桁だけでは処理出来ず, この桁から(10に対する3の補数の)7を払って, 上の桁に1を足す. (Dになる.) これが滑り板の白部分に相当する. 上の図で, Cの5に5を足すのに, 補数の5を払って(上に押し上げて)上の桁に1を足したのである.

算盤の図のEは, 99に1を足すところで, 最も右の桁の9を払って, 次の桁に1を足そうとするが, その桁も9なので, 再び9を払い, さらに次の桁に1を足す.

残念ながら, Chadwick Brain Calculatorはそこまでは出来ない. 上の図のEが状態99で, 1を足すべく, スタイラスを上まで押し上げても, 左に繰上げの窪みがない. すぐ上の桁で繰上げが処理出来るところまでしか, この計算機は対応していない. 前記の使用法によると, こういう場合は, 上の桁にいき, そこは状態9のはずだから, 1の窪み(白)にスタイラスをいれ, 押し上げ, 左へ回して繰上げをせよと書いてある. 9への繰上げはひと様を使うのである.

減算の方法は説明するまでもないであろう. この計算機は1960年代まで売られていたらしい. ウェブを探すと, 類似の計算機はいろいろある.

2011年3月16日水曜日

Gaussの正十七角形

高木先生の近世数学史談に, 19歳のGaussが, 1796年3月30日の朝, 正17角形の描き方に気づいた話が出ていることは, すでにこのブログで述べた(2008年12月12日). 今回はその計算を追ってみたい.

360°=17φ とおく. また,

cos φ+cos 4φ=a
cos 2φ+cos 8φ=b
cos 3φ+cos 5φ=c
cos 6φ+cos 7φ=d
a+b=e
c+d=f

とする. 「よく知られているように」 e+f=-1/2 (「...」内は高木先生)

ここでまず え? と思う. 計算してみると,

(define pi (* 4 (atan 1)))
(apply + (map (lambda (n) (cos (* n (/ (* 2 pi) 17))))
(a2b 1 9)))
=> -.4999999999999999

(いつものように(a2b m n)は[m .. n)を生成する.)



しかし, この図をみれば, 1辺の長さ1の正17角形の1辺の半分だから, 当然な話だ. つまり, 角CABは正17角形の外角なので, これがφ. 従って多角形の1辺を1とすると, ABがcos φ, CDがcos 2φ, EFがcos 3φ,... . cos 8φまでいくと, 頂点の8までの横軸の和になり, これはAからみれば-1/2なのは明らか. 一旦そうと分かると, よく知られているとも思える.^^)


「con nφ=cos(17-n)φに注意し, 簡単な計算によって」
2ab=e+f=-1/2
2ac=2a+b+d
2ad=b+c+2d
2bc=a+2c+d
2bd=a+2b+c
2cd=e+f=-1/2

これはなぜか. 正直に掛けてみる.
2ab=2(cos φ+cos 4φ)*(cos 2φ+cos 8φ)
=2cos φ*cos 2φ+2cos φ*cos 8φ+2cos 4φ*cos 2φ+2cos 4φ*cos 8φ.

三角法の公式を見ると,
cosα+cosβ=2 cos(α+β)/2*cos(α-β)/2
というのがあり, cosの積を和に出来る. これを使うとm>nとして,
2cos mφ*cos nφ=cos(m+n)φ+cos(m-n)φ
だから

2cos φ*cos 2φ=cos 3φ+cos φ
2cos φ*cos 8φ=cos 8φ+cos 7φ
2cos 4φ*cos 2φ=cos 6φ+cos 2φ
2cos 4φ*cos 8φ=cos 5φ+cos 4φ
と1から8までそろうから, e+fになる.

これを6回もやるのは面倒だから,

(define a '(1 4))
(define b '(2 8))
(define c '(3 5))
(define d '(6 7))
(define (foo m n) (list (min (+ m n) (- 17 m n))
(abs (- m n))))
(define (prod x y)
(sort (append (foo (car x) (car y)) (foo (car x) (cadr y))
(foo (cadr x) (car y)) (foo (cadr x) (cadr y))) <))

と定義し,

(prod a b) => (1 2 3 4 5 6 7 8) = e + f
(prod a c) => (1 1 2 4 4 6 7 8) = 2a + b + d
(prod a d) => (2 3 5 6 6 7 7 8) = b + c + 2d
(prod b c) => (1 3 3 4 5 5 6 7) = a + 2c + d
(prod b d) => (1 2 2 3 4 5 8 8) = a + 2b + c
(prod c d) => (1 2 3 4 5 6 7 8) = e + f

「故に」
2ac+2ad+2bc+2bd= (上の真ん中の4行を足すから) 4a+4b+4c+4d=4e+4f=-2.

左辺は2(a+b)(c+d)=2efなので, ef=-1. e+f=-1/2だったから, 入試問題みたいだが,
x2+1/2*x-1=0
を解いて,
x=-1/4+√(17/16), x=-1/4-√(17/16),

高木先生は前のがeなのは数値的に分かるといわれるので, やってみる.

(apply + (map (lambda (n) (cos (* n (/ (* 2 pi) 17))))
'(1 2 4 8)))
=> .780776406404415

一方

(- (sqrt (/ 17 16)) (/ 1 4)) => .7807764064044151

eとfが分かったが, まだφが4つも入っているので, aやbを知らなければならない. 幸い, aとbの和(= e)と積(= -1/4)も分かったので, 先ほどと同様に解ける. 後は数値計算だから, WolframAlpha様にお出まし願う. 入試の答をインターネットに聞くのは止めた方がよさそうだが, いまは試験ではないので許されよう.

solve x^2-(-1/4+sqrt(17/16))*x-1/4=0
と入力すると,
x=1/8{-1+√17±&radic(16+(1-√17)2)}
と出た. 高木先生のとすこし違って見えるが, 16+(1-√17)2が34-2√17なので安心する. つまり,

a=1/8{-1+√17+&radic(34-2√17)}
b=1/8{-1+√17-&radic(34-2√17)}

cとdも同じように得られる.

c=1/8{-1-√17+&radic(34-2√17)}
d=1/8{-1-√17-&radic(34-2√17)}

ところで, 前のSchemeで (foo 1 4) => (5 3) だから, cos φ*cos 4φ=(cos 5φ+cos 3φ)/2=c/2. cos φ+cos 4φ=a と一緒にすると, cos φとcos 4φが解ける. そうしてやっと念願の



が得られるのであった. それにしても, 最初のa, b, c, dの組分けあたりに気づくところは凄い.

2011年3月15日火曜日

古い計算機

東京理科大学の近代科学資料館で見せて頂いた, もう1つの古い計算機はADALLというものだ. 丸いので変な向きに置いてあるが, 以下のである.



これは英国バーミンガムのTemple Courts, Temple RawにあるThe ADALL Co.製らしい. いうなれば百進法の計算機である. 気宇壮大だ.

いつものように自分で描き直したのが以下だ.



灰色の背景の手前にある白い歯車状なのが, 百進歯車である. その少し内側に00から99まで十進2桁の数字(内数字)が書いてあり, 中央右の窓の内側に見える数字が歯車の状態を示す. この図の状態は00である.

さて, これに0≤n<100を足すには, 外側の数字(外数字)のnのところにある, 歯車の窪みにスタイラス(最初の写真の箱の蓋に見える)を差し, 真横にあるストッパーまで右回転する. そうするとnステップだけ百進歯車が回転し, 状態がnだけ進む. 上の図で, 窪みの説明が差している先は, 11に対応するそれである. 0に対応する窪みはストッパーに接していて, もう回せない.

A足すBの計算には, 最初, 図のように状態を00にしておき, 外数字のAのところから, Aだけ回転; 次に外数字のBのところから, Bだけ回転すると, 窓に現れる内数字がA足すBになる. AもBも99まではOKだが, 足した結果が100を超えると, 状態はA+B mod 100 になる.

この計算機の秀逸なのは, 内側にある渦巻きである. レコードの溝状というか, 蚊取り線香状というか, 1本の溝の線で出来ている. 歯車を右回転すると, 渦巻きは順に内側に入るようになっている.

長窓の中で, この溝には, 3mmφくらいのボールが載っている. 加算の結果が増えると, ボールは徐々に内側に移動する. 長窓の上に, 右から1, 2, ..., 11 と書いてあり, ボールが1と2の間の下にあれば, 加算の結果の百の桁は1ということになる. だから, 2桁の数を何回も足しても, 総和が約1100になるまでは, この計算機は正確な答を示す. もちろん, 下の2桁が丁度00以外では, ボールは百の桁の数字の真下にはないが, 時計の短針が, 1時と2時の中間にあっても, 1時台の時刻が分かるように, この計算機でも百の桁は読み取れるはずである.

この計算機はいうなれば, 離散的円形計算尺である. 計算尺は普通は直線で, A尺とB尺が並び, A尺のa点にB尺の0を合わせると, B尺のbに対応するA尺はA尺の0からa足すbの距離になる. 従って, A尺とB尺を対数目盛にするとa掛けるbが計算できる.

ところで, 普通の計算尺では, A尺のaにB尺の左端を合わせるか右端を合わせるかが, 悩ましいところである.



上の計算尺は3掛ける2で, B尺は左の1をA尺の3に合わせ, B尺2のA尺には6がある. 下は3掛ける4で, 12になるので, B尺の右の10をA尺の3に合わせている.

この面倒を省いたのが下の円形計算尺である. ADALLの計算機は, 対数目盛の代りに等間隔に目盛をつけた加算用の計算尺である.

John Wolffさんのウェブページにも, この計算機の簡単な説明がある. 同ページによると, 理科大でこの計算機の箱に入っていた数表の説明もあった. 要は1シリングが12ペンスなので, sシリングpペンスを十進法にし, 12*s+pペンスに換算する表だったらしい.

2011年3月14日月曜日

古い計算機

東京理科大学の近代科学資料館には古い計算機の貴重な収集がある. なんども訪れて眺めているが, その中に使い方がわからない計算機があった.

先日お願いして, それをよく見せて頂き, 使用法が確認できた. 今回はそれを説明したい.

下の写真は, Calculatorという, なんの変哲もないない名前の計算機である. 会社もCalculator Corporationといい, 銘板からすると, ミシガン州のGrand Rapidsという町にあったらしい.



真ん中辺を拡大すると, ピントは甘いが,



のようだ. この4桁分を説明用にPostScriptで描いたのが次である. この方で話を進める.



まず1桁分を取り出したものを2個並べる.



こういう計算機の基本構造は, 10の状態を取りうる十進歯車を必要な桁数分用意し, 各桁の歯車を加算する数だけ回転し, 繰上げを次の桁に伝えることである.

この計算機の十進歯車は, 中央の灰色の部分で, これが回転する. ラチェットがあるのか, 離散的な位置に止るみたいである. 周囲に白い窪みが10個見えるが, その内1つが他より大きく窪み, 下に書いてある赤字の数字が読める. その数字がその桁の歯車の状態である. 左は0, 右は5を示している.

この調子で, 上の4桁の状態を読んだのが, それぞれの右下の0000, 1234, 6912である.

次は加算の仕方. タイガー計算機などでは, 十進歯車に噛み合う出入りピンの数を調整して, 0から9までの数を足す. この計算機ははるかに簡単で, ひと様がスタイラスという棒を窪みに差し込み, 昔の電話器のダイアルのように, 右下に飛び出したフックに当るまで, 右回転をするのである. 加算すべき数は外側に白抜きで書いてある.

白い窪みにある, 青い点は, スタイラスを差す場所で, 一番上は左から順に1, 2, 3, 4である. それぞれ回転すると, 最初0, 0, 0, 0であった歯車は, その数だけ状態が進み, 中央の図のようになる.

中央の図になったところで, 再び5, 6, 7, 8にスタイラスを差し込み, 回転すると, 下のように, 加算が出来て, 6, 9, 1, 2になるのである.

極めて簡単だ. 加算では歯車は電話のダイアルのように右にしか回さない. このままでは減算には対応していない.

そうそう, 加算の前に, 各桁を0にリセットしておく必要がある. それには大きい窪みにスタイラスを差して, フックまで左回転する. (と書いたウェブページがあるが, 左に回転出来るのだろうか.)

問題は繰上げだ. 最初のズームの写真を見ると, 下の桁の7と8の間から, 上の桁の0と9の間にかけて, 盛り上がっている形がある. ここに繰上げの仕掛けが隠れているらしい. いろいろ想像しているが, こんなに簡単な仕掛けはまだ思いつかない.

なお, 古い計算機を収集している, オーストラリアのJohn Wolffさんのウェブページにも, この計算機の簡単な説明があった.

2011年3月11日金曜日

二進乗算

仕事がら二進法の乗算の機会は多い. 二進だから十進の九々の代りに一々だけが必要だが, 逆に足す数が多い. 11111(被乗数)に111(乗数)を掛ける例を下の左に示す. 被乗数を乗数に1がある場所に書き移し(今はすべての場所)て部分積を積み重ね, 各桁を二進法で縦に足す. 足すというのは1を数えるだけ. その和が奇数なら, その桁は1; 偶数なら0だ. 和を2で割った商が繰上げで, 次の桁は繰上げから1を足し始める.




つまり, 積の1の桁は, 1が1個だから1で, 繰上げは0; 10の桁は, 0に1,2と数え, 和が2だから積は0, 繰上げは1, 100の桁はその1に3を足し, 積は0で繰上げは2. これを繰り返す. 最後の繰上げは高々1だが, 1ならそれを書いて終る.

右のDCBAなどの図は, 部分積がどのビットの積かを示したものだ. 1の桁はA掛けるa; 10の桁はB掛けるaとA掛けるbの和; 100の桁はC掛けるaとB掛けるbとA掛けるcの和のように見る.

そこで次の図のように, 被乗数DCBAと, 乗数を逆にabcdと書いたカードを作り, 上下に合わせ, 下のカードを順に左へずらしながら, 重なった部分を見ると, その桁で部分積の足し合わせる位置が分かる.



だから, 例えば3番ではCBAとabcで上下がともに1の場所を数えると和が得られる仕掛けである.

11101掛ける1011を, カード方式でやってみると, このようになる.



tはそのカード位置での, 上下が1の場所の数(十進). sはその桁の積(二進). cはその桁からの繰上げ(十進)である.

一番上はtが1. 従って, (その前のcは0なので,) その1からs=1, c=0となる.

2段目, 3段目も繰上げなしなので, 簡単だ. 4段目で繰上げ1が出た. 従って5段目はt=2と4段目のc=1を足して, 3になり, この段のs=1とc=1となる.

cを一瞬だけ記憶し, tを足し, sを書き出し, cを次へ送る. これで乗算が出来るわけだ. 最後のcが1なら, それを書くのも上と同じである.

実際に計算した積, 100111111と同じものが得られている.



ところで最初の計算のように, 1が何個が並んだもの同士の積は簡単である. 2p-1掛ける2q-1で考えると, 1かp個と1がq個並んだものを書けるので, (2p-1)(2q-1)=2p+q-2p-2q+1.

つまり, p≥qとし, 1の桁を0桁目というと, p+q-1桁目からq桁目まで1を並べ, q-1桁目から1桁目まで0を並べ, 0桁目に1を書き, 最後にp桁目の1を0にする.

p=q=4の場合は, 上の伝で書くと, 1111掛ける1111は11100001だが, これは十六進の九々に相当する, ffe1である. ELIS風ではフフテイだ.