RPN電卓のおはなし
言いたいことのある人はたくさん居るはず。
HPから15CのCollector's Editionが出まして、そりゃまあ買いましたよ。
実は自分にとってHP電卓で『横型』は初めての購入だったりする。
そもそも最初に買ったHP電卓、会社はHewlett-Packradと呼ばれていた時代。そして日本ではYokogawa Hewlette-Packard、すなわちYHPだった時代で19Cに始まります。高校生の頃にめっちゃバイトして頑張った。この19C、とにかく長く使ってて、大学~社会人の初期まで使ってた。
まあでもそもそも携帯性が悪いやつだったので、その後に買ったのは32S。32Sが壊れそうだったのと、供給が終りそうだったので32SIIを2台ほど買い溜めしたのは後の話。
実は48Gも持ってたことはあるんだけど、これは早々に手放してしまっていた。
32SIIを2台もストックしときゃまあ、残りの人生、困ることはないだろうと思ってんだけど32SIIが壊れないもんだからストックしてた1台を手放してしまってしばらくしたら使ってた32SIIが壊れた!
んで、気付いてみればHP電卓のマトモなやつは市場に残ってないわ、古い機種は高値で中古売買されているような時代になってたという次第。
とはいえ一部の機種は細々と出てたりしたんだけど、これが何とも出来が悪かったりというね。
縦型の再販(げな)やつといえばHP 35Sで持ってるには持ってるんだけど、これも出来がイマイチ。縦型で四則演算できりゃまあいいやと買った30bも結構酷い。何が酷いってRPNモードに設定しても、すぐに忘れる。毎回、RPNモードに設定しなおさないとなんじゃ使えるか~い。海外では30bを関数電卓に改造するファームを作ってる連中がいるんだけど、30bの『良い』個体が手に入らないのでやめたとか言ってるくらい酷い。
というわけで残念ながらマシな縦型はもう手に入らない。
にしても横型が人気となってなぜか残り続けたのも不思議よね。日本人的には横型はソロバンのイメージなんだけど。
さてRPN、すなわち逆ポーランド記法とは何ぞやというお話をしましょう。同じような話を書いてる人はたくさん居そうだけど。
RPN、それはそれは恐ろしいモノで、これに慣れてしまうと普通の電卓に戻る気がしなくなるほどのものです。なのになぜ普及しなかったのかというと、そりゃもう教科書通りではないからにちがいないと思ってます。
私たちは普段、計算する時に次のような式を使いますね。
1+2=3
『普通の』電卓で計算する時には次のように押しますね。
[1] [+] [2] [=]
そうすると答えは"3"と表示されます。んじゃこれをRPNではどうするのかというと以下のようになります。
[1] [ENTER] [2] [+]
[ENTER]ってなんじゃー!という方はヘッダ画像をよく見て。そしてヘッダ画像から[=]キーを探して。
RPNは簡単に言うと『演算子を後置する』方式です。先に値を設定しておいてから演算を実行するというスタイルですね。
RPNの特徴が顕著に出るのはカッコ計算。
(1+2) × (3+4) =
これを普通の電卓で実行しようとするとカッコキーを押すので12ストローク。では、RPN電卓ではどうすんだというと
[1] [ENTER] [2] [+] 3 [ENTER] 4 [+] [×]
と押します。なんのこっちゃ。分けて読めばわかりやすくなります。
「1と2を足す」たものに「3と4を足す」たものを「かける」
ちゅうわけですね。ここで察しの良い人なら気付くでしょう。1[ENTER]2+で1+2の結果は出るけど、これってどこに保存されとったんじゃ?と。
RPN電卓では基本、4レベルのスタックを持っています。基本のスタックをX,Y,Z,Tといいます。
T
Z
Y
X [みえているところ]
1行しか表示のない電卓の場合、見えているのは"X"だけ。入力はXに対して行われます。[ENTER]キーを押すと、Xの内容はYにコピーされます。Yのもともとの内容はZに移動し、Zも同じくTに移動されます。これがRPN電卓における[ENTER]キーの動作。
1を入力した段階では次のようになります。
T
Z
Y
X 1
ENTERキーを押すと「コピー」されるので、スタックは次のようになります。
T
Z
Y 1
X 1
ここでもし[+]を押すと演算はX,Yに対して行われるので結果は2となって、これはXに置かれます。なので表示は2となるわけ。
[+]を押すのではなく数字を入力するとXは上書きされて、別なものになります。[2]を押したら次のようになります。
T
Z
Y 1
X 2
ここで[+]を押すと結果は3となって、その結果はXに置かれます。
T
Z
Y
X 3
さてここで、新たな数値を入力するとXの内容は「上」に上がります。ENTERを押した場合のコピーとは違って、単に上に上がります。で、[3][ENTER][4]と押した場合のスタックの状態は以下のようになります。
納得いかん場合は今までの説明読み返して。
T
Z 3
Y 3
X 4
ここで[+]を押すと演算はX,Yに対して行われるのでX,Yの和がXに置かれます。このとき、上に残っていた値は自動的に「下」に下がってきます。
T
Z
Y 3
X 7
この値の自動的な上下がスタックの考え方で、コンピュータのスタックについて理解しているとわかりやすいでしょう。
で、最後に[×]を押すとどうなるかは、もうおわかりの通りです。
T
Z
Y
X 21
わかんない?わかんないよね。こうやってスタックの移動をいちいち書くと余計にわかんないというのはある。
ところで、次の式はどう計算する?
1+2×3 = ?
これ『普通に』『普通の』電卓で計算すると間違います。んがしかし昨今の電卓はカシコイので正しい答が出るやつがあることもある。
でもWindows(10)の標準の電卓でやってみましょう。
1+2を入力すると1+に2までを覚えてて、ここで=を押せば計算するわけですが、『式通り』に入力すると次は×を押すので押してみる。
3を押すと先の1+2が計算されて、3が覚えておかれて、あらたに×3が入力されてこの状態。これで=を押すとどうなるかというと、おわかりの通り
となってこれは誤り。
この場合、『先に』乗除をやってから加減をするというルールが守られてないからです。
なんでこれ書いたかというと先ほど、RPNではカッコの中を先に入力するという人為的な介入をしたからで、普通の電卓なら介入しなくていいかといえば、そうではなく、この場合にならば先に乗除算から計算しないといけないケースがあるというお話。んじゃこれRPNだとどう計算するかというと次の通り。
1 [ENTER] 2 [ENTER] 3 [×] [+]
わかりそう?1を先行して入力するものの、2 [ENTER]で「1をスタックの上に上げておいて」2×3を先に計算してから+するというわけです。もちろん、『先に計算する』とわかっている部分を先にやってもOK。その場合には
2 [ENTER] 3 [×] 1 [+]
となるわけですね。
世の中には面白い電卓もあって、某シャープなんぞから出ていた「完全数式通り」なんてものは、=を押すまで数式を評価しない。1+2×3-2÷2 = みたいなやつは = を押すまで何もしないので、超横長液晶で数式が全部出るちゅうすごいのがありました。
というわけで今回はこのへんで。