はじめに


If a "computer" is a "compute-er" , I want him to compute.

〜  もし、コンピュータが『計算をする者(compute-er)』なら、
      コンピュータには『計算(算術演算)』をやってもらいたい 〜

私は子供の頃、計算するのが好きだった。

小学1年の頃、最初に興味を持ったのは足し算だった。
1足す1は2、2足す2は4、……、と計算していく、ガマの油の口上でおなじみの、2のべき乗である。
1024ぐらいまでは、暗記していた。
ここから先は、位上げを伴う足し算のやり方がわからなかったので、2048止まりだった。
しかし、学年の後半になって、位上げを伴う足し算の方法を教わってからは、事態は一変した。
もう、限界はない。ひたすら計算するのみである。
下敷きの裏や、ノートの裏に、ひたすら計算していった。30桁ぐらいになるまでやった。
数の数え方は兆までしか知らなかったので、この30桁からなる数字の列をどう読んでいいのかわからなかったが、
そんなことはどうでもよかった。ただ、その数字の羅列自体に魅力を感じた。

小学3年になり、2桁以上の掛け算の筆算のやり方を教わったとき、

123456789×987654321

を計算してみようと思った。1時間ぐらいかかって答えが出たときはうれしかった。

やはり、小学3年の頃、単位に興味を持った。
よく手帳に載っている度量衡の換算の表がきっかけである。
1インチ=2.54センチ、という関係式から、逆に1センチは何インチに相当するのか知りたくなり、
1割る2.54の計算をやった。
計算しやすいように、先に254×1から254×9までの表を作っておき、何日かがかりでやった。
(←そんなに時間のかかる物ではないが、子供なので1つのことに何時間も集中していられないのだ。
 しかも、テレビも見たいし、夜は早く寝なければならないし。)
100桁近くまで計算して、循環小数になることを突き止めた時、

「この結果を知っているのは、世界で自分一人だけだ」

という興奮を味わった。

やはり、小学3年の時、平方根に興味を持った。

sqrt(2)=1.41421356(一夜一夜に人見頃)
sqrt(3)=1.7320508 (人並みにおごれや)
sqrt(5)=2.2360679 (富士山麓、オウム鳴く)

この「麓」が読めなかった。子供だから。
家には漢和辞典がなかったので、
(という以前にそのような物の存在を知らなかったので)
この字の読み方を調べる術も知らなかった。

sqrt(7)=2.64575(菜に虫いない)

と、ここまでは本で見つけたが、sqrt(8)だけは、どの本にも載っていなかった。
もちろん、sqrt(8)=2×sqrt(2)なのだが、 当時、『×』という演算とルートという演算が交換できるということが、納得できなかった。
そこで2と3の間の数を順に試していって、

sqrt(8)=2.8284

まで求めて、どうやら、sqrt(8)=2×sqrt(2)という関係式が成り立つらしいということを発見し、
ついでに、2×sqrt(3)の2乗が12に近くなることも確かめて、

一般に、ある数の4倍の数の平方根は、その数の平方根の2倍に等しい

ということが成り立つ、ということを発見した。
小学3年なので、これを式で表すことはできない。言葉で表現するのみである。
当然、このことを話してわかってもらえそうな相手は、誰もいない。

同じく小学3年の時、円周率に興味を持った。
当時、小学館の図鑑シリーズの中に『数の世界』というのがあった。その本の中でニュートンの公式、

π/8=1/(3×5)+1/(7×9)+ ……

を見つけた時、今の自分の歳から計算を始めれば、一生のうちに世界記録を破ることができると思い、狂喜した。
しかし、11×13の項まで計算して挫折した。余りにも、3.14からはずれているのである。
計算がまちがっているのか、式自体がまちがっているのか、何故、ぜんぜん値が違うのか、理解できなかった。
ちなみにこの時点で分母は、

3×5×7×9×11×13=135135

となり、筆算にしては充分大きい数字である。
しかし、このニュートンの公式は、余りにも収束が遅いのだ。
せめて、マーチンの公式を書いていてくれたなら。
当時は収束に速い/遅いがある、ということを知らなかった。

もしパソコンがあったなら、とは云わない。
あるいは、近くに教えてくれる人がいたなら、とも云うつもりはない。
せめて電卓があったなら、飛躍的な成果が望めたに違いない。
ちなみに、当時はまだ電卓というものは世の中に存在しなかった。 一般家庭にある計算の道具といえばそろばんのみである。
しかし、私はそろばんに興味はなかった。 使い方は知っていたが、手でやる方が速かったので、計算する時はもっぱら筆算に頼った。

もちろん当時から、コンピュータというものの存在は知っていた。
シャンクスが10数年かけて707桁まで求めた円周率を、20時間程度で2035桁まで求めてしまった、 その夢のような計算速度を持つ『コンピュータ』という機械。いつの日か使ってみたいと思った。

…………月日は流れ、カシオ・ミニが発売され、やがて8ビットパソコンが世に現れ、 16ビットを通り越し、32ビットが一般ユーザの主流となっている。 そのコンピューティングパワーは、かつてアポロ計画でNASAが使ったコンピュータの何100倍にもなる。 ついに夢の機械が手に入る時が来た。

さっそく、付属の ROM BASIC、或いはCでプログラムを書いて、 子供の頃の思い出、1割る2.54を計算してみる。

1/2.54=0.393701e-6

違う!
こういう結果が欲しかったのではない!
いったいこの『e』というのは何なのか?
昔計算した時は100桁近くで循環したはずだ ……

もちろん、この程度の精度で充分な場合もある(というか、たいていはこの程度で事足りる)。
しかし、末尾まで正確な値が欲しい時もある。
現に、メルセンヌ素数の発見や、円周率の記録更新のニュースが、新聞に載ったりしている。
そういう計算を自分もやってみたい。
そういう夢を、

1/2.54=0.393701e-6

みたいな無粋な仕打ちで打ち砕くことはないだろう。
なんで俺は、こんなアバウト野郎と付き合わなくてはならないのか。

大型計算機の大量データ処理とか、パソコンのOA機能とか、そういう計算の必要性を認めた上で、
私は、計算機には最も primitive な計算である四則演算をやらせてみたい。
それも浮動小数点の近似計算ではなく、末尾1桁まで正しい、正確な値が知りたい。
要するに、100!とか、2756839−1のような大きな数を、正確に知りたい。
子供の頃「手計算ではとても無理だが、計算機があると、一瞬でできるんだろうなあ」
と夢見ていた計算を、そういう強力なコンピューティングパワーを手にした今、実際にやってみたい。

ところが、前述したようにたいていの計算機言語では、大きな数を扱うことができない。
これでは、メルセンヌ素数の発見など思いもよらない。
Pell方程式を解くにも、すぐ桁あふれしてしまうようなありさまである。
なんとかならないものか。


という訳で、このホームページでは、多倍長整数用言語UBASICを使って、 整数論のいろいろな問題に挑戦してみる。
整数論は、問題の定義は簡単なので、そのままプログラムにも乗せやすい。
手計算では無理なレベルまでパソコンの計算能力を頼りにしらみつぶしに計算していく。
計算能力を駆使しても先に進めなくなった時、あらためて、理論というものの威力がよくわかるはずだ。

基本的に高校程度(式の変形ができる程度)の知識があればよい。
UBASICの命令にしても、あれば便利という程度の命令しか使わない。

このホームページを通じて、
コンピュータというのは、ものすごい計算ができる機械なのだ
ということを、あらためて思い出してもらえば幸いである。

……という訳で。
  子供の頃の自分へ。

   …… 君が求めていたものが、今ここにある ……


戻る 『数学者の密室』目次 『1章 4/n=1/a+1/b+1/c』

E-mail : kc2h-msm@asahi-net.or.jp
三島 久典