開放より2段絞ったところ

徒然なるままに…主にカメラの事を書いていくことになるかと。

RPN記法の電卓

世の中というものは広いものでして…

電卓といっても星の数ほど種類があります。

よく見る普通の電卓から金融電卓、関数電卓、パソコン・スマホも広義では電卓に含まれるかもしれません。

そんな中でも異色放ちまくりなのが、RPN記法という独特な数式の入力方式を持つ電卓です。

 

簡単な問題です。ひっかけとかじゃないです。

1 + 1 を電卓でやるとき、なんて打ちますか?

普通に順番通り 1 + 1 って打って、最後に = を押せば期待した通り 2 が出ます。

これを数式通り入力なんて言ったりします。

関数電卓ではカシオのVPAM (Visually Perfect Argebraic Method)とシャープのDAL(Direct Argebraic Logic)というアルゴリズムがあります。今や数学自然表示という別の表示方法に置き換えられつつありますが、それでもまだ現役のアルゴリズムです。

考えてみてもください。この数式通りって言う方式はコンピュータにとっては少し面倒なんです。

1 + 1くらいならきっとあまり大きな違いはないでしょうが、例えば 1 + 2 × 3  を計算したいとします。算数でも習ったと思いますが、この場合掛け算を先に計算したうえで最後に1を足します。したがって計算順序としては後ろから計算しているのです…。かっこがつくともっと厄介なのは何となく理解していただけるのではないでしょうか?計算によっては真ん中から計算を始める場合だって出てくるわけです。

 

一方でRPN記法では記法を知らないと 1 + 1 すらできません

ちなみに1 + 1 は 1 (enter) 1 + という記述をします。

 

1 + 1 は 1 (enter) 1 + という記述をします

 

…え?

 

ってなります普通は。

極端な話、RPNは先に数字を入力してから後で計算符号をつけるというモノ。普通の計算式では数字と数字の間に符号を置くので中置記法なんていわれたりしますが、RPN後置記法です。

ちょっと複雑なのも一応見てみましょう。例えば 2 (3 × 4 - 6 ÷ 3) とか。

普通の(関数)電卓ならば式をそのまま入力する形になるので、最後に計算するはずの2を一番最初に打ち込んでいます。

RPNではこの場合だと 3 4 * 6 3 /  - 2 * という感じになります。実はRPNは計算ステップ通りに数字と符号を打ち込んでいけば計算できてしまうんです。

例でいうと、「3を4でかけたものから 6を3で割ったものを引いて 2でかける」というステップを踏んでいます。これがRPNの記法。

 

プログラミングをしたことあるかたならわかると思いますが、標準入力に文字と数字が混じっていると処理が大変ですよね?数式通りなんてまさに式の中に符号溶かしこんでるようなもんだから、コーディングは非常に煩雑です。ところがRPNならば数字か文字(列)かだけ判断すればいいわけです。数値の保存もスタックといって、変数を一度宣言してしまえば終わりです。

 

プログラミングを久々に再開がてら電卓を作ってみようと思ったのですが、RPNにはまっているのと動作が非常に興味深いので今回はRPN電卓を作っていきたいと思います。まだ何となくアイディアがあるだけで方針は全くまとまっていませんが…。とりあえずコツコツ進めていきたいと思います。