Calculation vs. Enumeration

お茶大理   細矢 治夫

 プリントをしたくても、「仕方ない。やってやる。」といって威張っているコンピュータに頭を下げながらしかできなかったから、ワープロというものが出現したときには、目の上のウロコがはがれるような気が確かにした。現在のコンピュータは、絵を描いたり、超現実的な動画をつくったり、音楽をかなでるだけでなく、人間様の唱う歌の点数までつけてしまう。およそ人間の願望を全て叶えてやるとでもいうように、コンピュータのほうが手ぐすねをひいて待っている状況である。この化学ソフトウエア学会の諸姉兄の活動も極めて多岐にわたり、かつレベルも上がり、実に頼もしい限りである。しかしここでは、コンピュータ本来の計算機能に関わる話に止めることをお許し願いたい。
 日本語で単に「数える」とか「計算する」といっても、英語にすると、calculate,compute, count, enumerate など、少しずつ微妙に違う使い分けが必要になる。estimate とか analyze といったほうが良い場合も出てくる。ここでは、これらの言葉の間の違いを具体的な例を使って、改めて考えることにする。何のために。それは、自分のやっている研究やプログラム書きの仕事の位置付けや目標の確認のために、何らかのプラスになることであると思うからである。
 calculate は簡単な計算。もう少し単純な計算は reckon だが余り使われない。逆に、もう少し手間暇のかかる複雑な計算を機械的にやるのが compute というのは常識であるが、その違いは、calculator 、 computer という名詞をつくるとよく見える。これに対して、一つ二つと数えるのが count と enumerate である。この違いもcounter、enumerator にしてみるとよく解る。前者は、トランプの点の計算やガイガーカウンターのように、一つ二つという「計数」専門だが、enumerator というのは、国勢調査員という意味があるらしい。つまり、きちんと計数の中味までを吟味する役までを果たしてしまう。
 そこで、1+2+3+…という「計算」を考えよう。当然 count の世界で、calculateも compute もお呼びでない。ところがこの逆数だと、事情は一変する。1/1+1/2+1/3+…という計算はもう counter の機能を超えている。そこでちょっとお利口な calculator の御登場。国産の電卓の関数計算機能の優秀さは素晴しい。チャチなコンピュータの数値計算の良い加減さをあざ笑えるだけの性能をもっている。これについては、別のところに詳しく書いたので省略する。とにかく、この調和級数の計算をコンピュータに命令することはたやすい。しかし、この無限大に発散する級数の振舞いをフォローできるコンピュータなど存在しないのだ。それを見極めるのが enumerate である。この言葉には「列挙する」という意味があるが、出てきた結果を一つ一つ吟味する enumerator の役も確かにもっているのである。
 次に調和級数を一ひねりして1/1−1/2+1/3−1/4+…と変えてみる。どんなに優れたプログラマブル電卓も、これにはお手上げである。そこで皆さん御自慢のコンピュータに、10万、100万項の計算をやらせてみると、なかなか log 2 = 0.69314718…に収束しないことに驚くはずである。enumerate を真面目にやれば、analyze の域に昇格して estimate を正しく行うことができるのだ。
 この種明かしは、1/(1+x) という関数を x で展開した 1−x+x2−x3+… を x で積分してから、x=1 を入れるだけという非常に簡単なものである。この他にも級数展開の面白い関係式は沢山ある。数学の公式集には、世界中の天才数学者達が数百年かかって築き上げてきた遺産ともいうべき様々な級数の収束値が載っている。それらの公式の結果を覚えるよりは、それらがどのようにして導かれたかを調べると、自分のいじっている問題に応用できる可能性がじわじわと見えて来るかも知れない。
 この他にも、いろいろな問題を自分でつくってみて、calculate, compute, count, enumerate のどの数え上げの方法をとるべきかを考えてみると面白い。例えば、地球、太陽、銀河、宇宙の大きさを知るには、またその質量を知るには、どのような観測と計算の方式あるのだろうか。こういうことは、自分の専門の計算やプログラム書きの問題とは全くかけ離れているであろう。しかしこういうことをたまに考えて、改めて自分の問題を一歩離れて見直してみることを、是非 お奨めする。