2008年9月26日金曜日

パラメトロン計算機完成50年

本年(2008年)3月26日のパラメトロン計算機PC-1の完成50年記念から半年がたつ.

記念の日の講演会会場で, NIIの橋爪君たちのパラメトロン加算回路のデモがあったが, それ以外にもこの半年にはパラメトロンのニュースがいくつかあったので記録しておく.


NTTの研究所でもパラメトロンの試作をしているというニュースを読んだ.

「パラメトロン・コンピュータよ再び」NTT研が低消費の論理素子を開発 EE Times Japan 2008年6月号

長さ250μm, 幅85μm, 厚さ1.4μmの長さの両側から圧電で正弦波の力を加えると, 上下に曲がりながら振動する. それが0相, π相になるという.


9月になると, 逗子の井村さんから, パラメータ発振に成功したというメイルを貰った. 励振と発振の様子NOTらしいものが見える.

ただ加算回路までは出来ていないらしい.

パラメータ励振に興味を持つ人がいるのは嬉しいことだ.

2008年9月19日金曜日

多面体描画道楽

小学生の頃, 算術か図画か工作の教科書に正五角形の書き方が載っていた. 正三角形, 正方形, 正六角形ならコンパスで描けるが, 正五角形は分度器を使うものと思っていたから, この方法には驚かされた. その後, 1辺の長さ1の正五角形の対角線の長さが(√5+1)/2であることを知ると,なんのことはなく, 驚きは霧散した.

この描き方は正五角形の書き方をサーチエンジンで探せばあるだろうが, 図のように底辺ABを引く. 辺の長さを1とする. その中点Cから垂線を立て, CD=1の点Dをとり, ADをDの方向へ延長してDE=1/2に点Eをとる. AEに等しくCDの延長線上にAFをとると, Fは正五角形の頂点になる.



正五角形をPostScriptで描くのは簡単だ.
/l 200 def     % 辺の長さ
0 0 moveto % 左下の位置へ移動
0 72 216 {dup cos l mul exch sin l mul rlineto} for
% 0度から72度おきに216度まで
closepath stroke


描いて楽しいのは正多面体である. 高木貞治先生の「数学小景」には, 正十二面体と, 正二十面体のEuclid幾何学原本による描き方が載っている.

どちらも立方体から始める. 正十二面体では, 面を構成する正五角形の対角線を1辺とする立方体をまず描く. これが内接立方体になる. 対角線を1とすると, 辺の長さは(√5-1)/2である. これををaとする. 立方体の上のの面には, 中央に前後に長さaの線を引く. 左右の面には, 中央に上下に, 前後の面には左右にそれぞれ長さaの線を引く. 図ではこれらの線を多少太めに示した.

さて上の面の線の両端U,Vから上方へ長さa/2の線UP, VQを立てる. 右の面の線の上端から右へ長さa/2の線WRを立てる. こらP,Q,Rと元の立方体の頂点A,Bとが正五角形になる.

中央の線は各面にあるから計6本で, そのそれぞれから2枚の屋根のような正五角形が作られるから, 十二面体になる.




一方正二十面体は同じような立方体の内部に作る. これが今度は外接立方体になる. 先ほどの各面の中央の線の両端U,V,W,X,Y,Zの隣り同士を結べばよい. すると三角形の屋根が12枚の他, 立方体の頂点に対応する三角形が8枚あり, 合わせて二十面体になる.

ここからはご用とお急ぎのないお立ち会いに. 私のかような図の描き方をご披露する.

上の図で, 私は手前をx, 右手をy, 上をzと見ることにしている. そして手前を左に寄せ, 上を手前に引き, x軸方向から見た位置に各点を移して描く. 左に寄せる角度をθ, 手前に引く角度をφとすると, 画面の左右方向Xと上下方向Yについては

X=- x sin θ + y cos θ+ 300
Y=(-x cos θ - y sin θ) sin φ+ z cos φ + 400
(300と400は原点を適当に移動)

だから, x, y, zを変換(map)し, X, Yに移動し(moveto), または線を延す(lineto)命令をmm, mlとすると

/phi 15 def /theta 15 def
/map {3 dict begin /z exch def /y exch def /x exch def
x theta sin mul neg y theta cos mul add 300 add
x theta cos mul neg y theta sin mul sub phi sin mul
z phi cos mul add 400 add end} def
/mm {map moveto} def /ml {map lineto} def


基盤の立方体は直ぐ描けて(稜の長さの半分lは多面体ごとに決める)
/ln l neg def
l l ln mm l l l ml l ln l ml l ln ln ml l l ln ml ln l ln ml
ln l l ml ln ln l ml l ln l ml l l l mm ln l l ml stroke

でよい.

正十二面体では
/l 1 5 sqrt add 2 div 60 mul def
/a 5 sqrt 1 sub 2 div l mul def /an a neg def

とした後
a 0 l a add mm %P
l l l ml %A
0 a l add a ml %R
ln l l ml %B
an 0 a l add ml %Q
a 0 l a add ml stroke %P

正二十面体では
/l 1 5 sqrt add 2 div 80 mul def
/a 5 sqrt 1 sub 2 div l mul def /an a neg def

とした後
an 0 l mm %V
a 0 l ml %U
l an 0 ml %Y
l a 0 ml %Z
a 0 l ml %U
0 l a ml %W
l a 0 ml %Z
0 l a mm 0 l an ml stroke %W X

で描くことが出来る.

数学小景には『正十二面体と正二十面体とは, 自然界が産み能わざる結晶で, それは純然たる「脳産物」である. 』の記述がある.

2008年9月14日日曜日

八進法算盤

下の図は, 私が1960年代の始め頃使っていた, 八進法の算盤である.



当時の計算機はIBM7040で, これはIBM704と同様のアーキテクチャゆえ, 命令語もデータも, 1語36ビットであった. 命令語はその36ビットを左からprefix(3ビット), decrement(15ビット), tag(3ビット), address(15ビット)の部分に分けた. このaddressとdecrementがLispでいうcarとcdrの語源になっているのは周知のとおり. (car=content of address part of register, cdr=content of decrement part of register) 各部分が3の倍数のビット数なので, 命令語の表示は八進法だったのである.

従って, コンソールの前で, 八進法の計算(加減算だけだが)をすること, しばしばであった.

その時考えたのは, 市販の算盤は十進法だが, 下の1の珠を1個外せば, 八進法の算盤として使えるということだ. 早速12桁の算盤を売っていないかと探したが, 市販の算盤はすべて奇数桁であり, 12桁のものはなかった. やむを得ず13桁の算盤を買い求め, 糸鋸などで縮めたのが, 上掲の算盤である.

通常は上が5の珠, 下が1の珠だが, 八進法算盤では, 上が4の珠となる. それ以外は十進法での計算と余り違わない.

この算盤は多いに実用的であった.

引き出しにまだ残っていたので, 実物の写真も載せておく.


八進法算盤

私が小学校で習ったときは, 下の1の珠は4個であったが, 私の母は1の珠が5個の算盤を使っていた. そのずーっと前は, (中国だけかも知れないが) 上の5の珠も2個あったらしい. 1の珠5個で十進法の計算をしていたことを考えると, なにも下の珠を外さなくても, 八進法で計算出来たわけだが, 実際にやってみると改造算盤には及ばない.

余談だが, 昔は病院にいくと, 4号室とか19号室とかはなかった. 4と9は「死」と「苦」を連想するので, 使わなかったのだ. 0,1,2,3,5,6,7,8の8個の数字を使うから, これも一種の八進法である. 私の算盤で, 上の珠を5と解釈すると, この八進法になる. 私はこの八進法を通常のと区別するため, 迷信法といったことがあるが, 東京女子大学の水谷先生がこの命名に興味を持たれたらしい.

最近のアーキテクチャは, 十六進法が多いので, 八進法算盤はお蔵入りになっている. 十六進法算盤はどういう構造にすべきか, 上下それぞれ3個というのもありかも知れないが, 操作出来るだろうか. 目もくらくらしてくる.



ところで, Hewlett PackardのHP16Cが市販されてから, 八進法, 十六進法の計算はもっぱらHP16Cを利用している.

HP16C

2008年9月3日水曜日

和綴じ本

8月にSilicon Valleyに行った折, Stanford大学のDon Knuthさんの家に寄った. 私は数年前からThe Art of Computer Programming(TAOCP)の監訳をしていて, エラーを見つけてはメイルで報告し, 先方からは航空便でコメントが送られてきたりしていたが, 会うのは初めてであった

TAOCPの第4巻は, ペーパーバックの分冊(Fascicle)の形で, これまで分冊2, 3, 4, 0が刊行されている. これらの分冊は刊行前に, Pre-Fascicleとしてインターネットからダウンロード出来る. 私はPre-Fascicleを和綴じにしていたので, 今回その1冊をDonに見せた. Donは奥さんのJillが和綴じが大好きだと喜び, 階下に伝えにいった. やがてJillが和綴じの本を持って2階へ来, しばらく和綴じの話題になった.




上の図は和綴じを示す. 細い線は本の輪郭, 太い線は綴じ糸を示す. 本の方は隠線消去してある. 糸の実線は外から見える部分, 破線は本の中である. 本には綴じる側に穴を4個所開け, 図のように糸を通して綴じる. この糸の線はEuler Circuitになっている. つまり一筆で書け, 出発点に戻れる. だから1本の糸で綴じられる.

しかしトポロジーの問題ならそこまでだが, 和綴じの場合は糸が節点から外れないように通す必要がある.

和綴じは別に一筆書きの問題ではないから, 糸はそれぞれの穴の中を3回通す. つまり穴に向かって3本の糸が集まるが, どの糸も穴に入る. Eulerの件は, 線が2本増えるから, 各節点が偶点であることに変りはなく, やはり1本の糸で綴じることが出来る.

本の縦の長さをl, 綴じ目から背までの幅をm, 本の厚さをhとすると, 糸の長さは2l+8m+18hで, B5版の場合lは257ミリ, 私はmを10ミリとしているから, hを5ミリとして, 糸は(+ (* 257 2) (* 10 8) (* 5 18))=684ミリ要る. ぎりぎりでは作業がし難いから, まず1メートルくらい用意するのが常識だ.

和綴じのもう1つの技法は, 糸の端が本の中に隠れていることである. 穴のどれかの中に, 始点と終点が潜んでいる.

私流の糸の通り方を描いたのが, 下の図である. 上の図と見比べて欲しい. こういう図をPostscriptでプログラムするのは楽しい.