1960年台から1972年まで続いたアポロ計画の映像を見ると、印象的なのは、ポケットに入っている計算尺。当時まだ、関数電卓は卓上型で、かろうじて電池で動作できるポケットサイズの電卓は四則演算しかできなかった。計算尺は、概算値を即座に計算することは得意だったが、正確な値を求めることができなかった。しかし、アイディアを検討する段階で、計算に長い時間を取られることなく、素早く計算できるツールとして使われていた。計算尺を置き換えることができる「関数電卓」で最初にポケットサイズを実現したのは、1972年に発売されたHP-35だった。
ポケットサイズの関数電卓は、あっというまに計算尺を駆逐したが、すぐに現在のパソコンの原型ともなる8 bit CPUを搭載したマシンが登場した。1981年にIBM PCが登場すると1980年台の中頃には、多くの計算作業は、PCが担うことになる。
電卓は、多数のデータを扱うのに難がある。いまでも多くの関数電卓に「統計モード」と呼ばれる多数の値を入力して、平均値や標準偏差などを計算する機能がある。筆者も大学の実験の授業でお世話になったが、いまでは表計算ソフト(最初の表計算ソフトVisicalcは1979年の発売)でなんのストレスもなくできる作業を、数字1行分のディスプレイで行うのはかなり面倒な作業だった。それでも、手計算よりは速く結果が得られたが、こうした多数のデータの処理は、PCに取って代わられた。
人によって違いはあるが、暗算の難しい計算をしなければならないことがある。ちょっとした工作に必要な材料の量を見積もったり、消費税込みの価格を求めるたり、行数から総文字数を求めたりなどだ。場合によって、連立方程式や2次方程式、三角関数を含む計算など、中学、高校程度の数学問題を解かねばならないこともある。しかし、どちらかというと計算主体で、複雑な繰り返し計算も不要という場合が多く、Maxima(注01)のような数式処理システムを使う、あるいはプログラム作成を行うまでもないことがほとんどだ。Excelを使うのもいいのだが、起動時間を考えると、電卓のほうが速く結果を得られる。WindowsやAndroid、Chromebookには、それぞれGUIの電卓プログラムが基本アプリとして搭載されているため、これらで済ますこともできる。
注01: Maxima, a Computer Algebra Systemhttps://maxima.sourceforge.io/
筆者は、10年ぐらい前までは、パソコンの横に関数電卓を置いていた。GUIアプリが起動するのを待っていられず、電卓のほうがすぐに計算できて、ストレスがなかったからだ。いまではGUIの電卓プログラムも一呼吸置く間もなく起動する。このため、電卓の実機は必要なくなった。しかし、考え事をしているときなどに、中断されることなく、計算できるという「機能」は必要なものだ。こうした「ツール」に必要なのは、使い方を迷わないこと。「簡単」である必要はないが、ちょっと複雑な計算をしようとしたとき、使い方を調べなければならないというものでは困る。
筆者は、HP社の逆ポーランド方式の電卓になれてしまっているので、1990年台に発売されたHP-48GXをエミュレートするEmu48(写真01。注02)というソフトウェアを使っている。WindowsのほかにAndroid版もあるため、Chromebookでも同じ電卓を使うことができる。
注02: Christoph Giesselink Emu48 Pagehttps://hp.giesselink.com/emu48.htm
1977~1980年台頃に登場した8 bit CPUマシンは、技術系計算から電卓を追い払った。BASICを使えば、多数の数値の計算が簡単にでき、平均や標準偏差といった標準的な計算以外を自由に行うことができたからだ。この時代のマシンには、オペレーティングシステムは搭載されておらず、起動するとBASICインタプリタが起動した。このインタプリタには、「ダイレクトモード」と呼ばれる機能があり、BASICの関数や数式、ステートメントを直接実行できた。基本的には、BASIC言語でプログラムを実行するものであったが、ダイレクトモードにより、ちょっとした計算はその場で実行できた。
今の多くの言語に装備されているREPL(Read-Eval-Print Loop)と同じである。REPLは、Lispマシンなどに装備されていた機能で、入力(Read)、評価(Eval)、表示(Print)を繰り返すループで作られたためにこの名前がある。Lispマシンは1970年台にMITで開発が行われ、1980年台初頭に商用化されたので、ダイレクトモードもREPLも同時期に独立して生まれたものと考えられる。とはいえ、1966年に作られたメインフレーム用のAPLは、ワークスペースという形ですでにダイレクトモードやREPLのコンセプトを実現していた。最近アニメに登場して有名になったIBM 5100は、BASICとAPLを切り替えて起動することができ、どちらも同じように使うことができた。
ダイレクトモードやREPLは、コマンドライン電卓とでもいうべき機能だ。言語が持つ機能がそのまま利用できるため、言語に慣れていれば、迷うことなく使うことが可能だ。電卓との違いとして、文字列演算や基数計算、ビット演算もできるという点がある。言語にもよるが、途中結果を簡単に変数に保存でき、ヒストリ機能で過去に実行した計算を呼び出して書き換えて実行する、関数などを定義できるといったメリットもある。また、最近の言語はライブラリも充実しているため、行列計算程度の単純なものならプログラミングも不要なことが多い。
さらに、最近の言語には、bignumなどと呼ばれる任意精度演算(あるいは多倍長演算とも)のライブラリが組み込まれているのが普通であり、これを使うことで、任意精度の計算ができる。たとえば、64 bitの2進数だと、10進数で20桁を超えてしまう。ところが、電卓やExcelでは有効数字は、10~15桁程度で、概算値しか計算できない。
Excelにも16進数を扱う機能はあるが、標準の関数(たとえば16進10進変換のHEX2DEC)では40 bitまでに制限されいる。前述のEmu48がエミュレートするHP-48GXでは最大64 bitまでの16/8/2進数を扱えるが、ディスプレイ幅が22文字しかないので、実用的に使えるビット数の範囲は限られる。
筆者は、こうした用途にRubyのREPLであるirbを使う。多桁でもそのまま計算できるし、数値関数類は、Mathクラスなので「Math::sqrt(x)」のように指定すればよい。ただ、Rubyでは、16進数や2進数は、内部では10進数として計算しているため、書式指定を使わないと16進数や2進数で表示できない。Linux/UNIXのコンソール計算機プログラムdc(注03)を使うと、入力や出力の基数をモードとして設定可能だが、変更した基数で次の基数を指定する必要があるなど、慣れないと使いづらい面もある。Androidアプリでは、irbは使えないが、Pythonが利用できる。Pythonの演算子はRubyほぼ同じで、8進数の表記に違いはあるものの、だいたい同じ感じで利用できる。
注03: Man page of DChttps://linuxjm.osdn.jp/html/GNU_bc/man1/dc.1.html
今回のタイトルのネタは、2016年の米国映画Hidden Figuresだ。1960年初頭のNASAマーキュリー計画の話なのだが、当初邦題が「ドリーム。私たちのアポロ計画」になってしまい物議を醸し公開直前に「ドリーム」と変更された。アポロ計画の映画は「Apollo 13」(1995年)が有名だが、主演のトム・ハンクスが案内役を務めた、1998年の米国テレビシリーズ“From the Earth to the Moon”(邦題フロム・ジ・アース/人類、月に立つ)が見応えがある。特に第5話の月着陸船開発の回がいい。1960年台のイギリスSF TVドラマFireball XL-5(邦題宇宙船XL-5)のエンドタイトル曲「I Wish I Was a Spaceman」(宇宙飛行士になりたかった)を使うところが泣かせる。