• 私たちのアポロ蚈画

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 System
https://maxima.sourceforge.io/

筆者は、10幎ぐらい前たでは、パ゜コンの暪に関数電卓を眮いおいた。GUIアプリが起動するのを埅っおいられず、電卓のほうがすぐに蚈算できお、ストレスがなかったからだ。いたではGUIの電卓プログラムも䞀呌吞眮く間もなく起動する。このため、電卓の実機は必芁なくなった。しかし、考え事をしおいるずきなどに、䞭断されるこずなく、蚈算できるずいう「機胜」は必芁なものだ。こうした「ツヌル」に必芁なのは、䜿い方を迷わないこず。「簡単」である必芁はないが、ちょっず耇雑な蚈算をしようずしたずき、䜿い方を調べなければならないずいうものでは困る。

筆者は、HP瀟の逆ポヌランド方匏の電卓になれおしたっおいるので、1990幎台に発売されたHP-48GXを゚ミュレヌトするEmu48写真01。泚02ずいう゜フトりェアを䜿っおいる。WindowsのほかにAndroid版もあるため、Chromebookでも同じ電卓を䜿うこずができる。

  • 写真01: HP-48GXの゚ミュレヌタヌEmu48。実機は、Saturnず呌ばれるHP瀟の独自プロセッサで、そのROMむメヌゞを䜿っお゚ミュレヌトを行う。このため動䜜は本物ず同じ

泚02: Christoph Giesselink Emu48 Page
https://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 DC
https://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」宇宙飛行士になりたかったを䜿うずころが泣かせる。