関数電卓コラム

08/12/06 省略の美学

08/12/08修正
08/12/15加筆
08/12/24修正

関数電卓,特に「数式通り」以降の世代のユーザーインターフェースには「省略の美学」というものがある.不要なキー操作は省いても正く解釈される,というものだ.おなじ美学はスクリプト言語のperlにも感じることができる.もちろん,目的は慣れたらなるべく少ない操作でも同じゴールにたどりつけるための配慮だ.従って知らなくとも困らないが,知っていると便利だし,第一格好良い.今回は関数電卓の省略の美学について語ろう.全て知っていたら貴方も関数電卓マニアだ.

小数入力時の省略

まずは初級編.これはすべての電卓に共通する機能で,1未満の小数を入力するときは頭の[0] を省略することができる.えっ知ってたって?

[.] [1] [=]

答え:0.1

ラストアンサー入力時の省略

これも,知っている人が多いと思うが,答が表示された状態でいきなり演算子記号,関数キーを叩くと,ラストアンサーが呼び出される.特に,ラストアンサーキーが裏にあるSHARPの関数電卓でこれを使うと大変便利.

[2] [+] [2] [=]

答え:4

[×] [2] [=]

答え:8

SHARPの関数電卓の場合ラストアンサーは[ALPHA] [=]と迂遠だが,sinやcosなどの関数の場合は[sin] [=]でラストアンサーのsinを取るので知っておくと便利だ.

掛け算記号[×]の省略

「数式通り」電卓では,掛け算記号[×]が省略できることがある.省略のルールは一般的数式と同じ.たとえば高校の数学では3×aは

と表記するが,関数電卓でも

[2] [STO] [A] [3] [RCL] [A] [=]

とやると答えは6になる.ネイピアの定数eやπを含んだ式も大丈夫.しかし,ここで注意しなければならないのは,(数値) [π]は大丈夫でも[π] (数値)はsyntax errorになるという点だ.従って円の面積はとやる必要がある.また,定数×関数(√sin,log等)も,間の掛け算記号は省略できる.

掛け算記号が一つ省略できるだけだが,これだけでも上級者になった気分にならないか?

ここで大切な注意が一つ.以下のような計算で[×]を省略してはいけない.

これを

[1] [÷] [2] [ln] [3] [=]

とやると,

と解釈されてしまう.省略された[×]の優先度は[÷]記号より高いのだ.ここは

[1] [÷] [2] [×] [ln] [3] [=]

とやらなくてはならない.掛け算記号の省略も,調子に乗りすぎると落とし穴に嵌る.もちろん,「Natural display」タイプで分数を使えばこのような心配は無用.

一方,「Natural display」タイプの電卓の場合だが,数式通りに書けば省略できるはずの掛け算記号が省略できないケースがある.例えば以下のケース.

普通こういう書き方はしないが,ルール違反ではない.しかしCASIO fx-912ESではSyntax Errorとなる.後ろにπや変数,sinなどの関数が来る場合はオッケーだ.それなら分数直後の数値入力を禁止するようプログラムを組むか,すぐ後ろの入力が数値なら[×]を補うかすればよいのだが.入力の仕様に穴があると言って良いだろう.「Natural display」の入力規則には他にも細かいところで「煮詰め」が甘いと感じる点があるので,次作に期待したい.

閉じ括弧の省略

計算を[=]で完結するとき,開いていた括弧はすべて正しく閉じたとして計算が行われる.たとえば

[(] [1] [+] [(] [1] [+][(] [1] [+] [1] [=]

でも正しく計算できる.これは関数電卓の内部処理,「スタック」を理解した上で使えば有効な裏技だ.関数電卓が,与えられた式をどのように解釈しているか考えてみよう.簡単のために,関数電卓は優先度1の[×] [÷],優先度2の[+] [-] のみが計算可能とする.

という計算を考えよう.数値が[2]入力されるとそれはスタックに積まれる.優先度2の[+]演算子がきてもすぐには計算をせず,1段上のスタックに積む.なぜなら,後ろに[×]が来た場合そちらを先に計算しなくてはならないからだ.これ以上優先度の高いものがない[×]が来た場合,直ちに計算を行う.するとスタック2に積まれた[×] [4]が処理され,スタック1に「7」が積まれる.

イコールキーが押される直前には,優先度2で区切られた「-5」,「7」,[2]が並んだ状態になるが,最後の[=]キーの意味は,「スタックに積まれている数値を全て計算し,スタック0にストアせよ」である.そして答「4」が得られる.

※本来,優先度2の上に優先度2の演算子が来たら下のスタックは計算してしまっても良いし,本物の電卓はそうなっているが簡単のため省略.

同じプログラムで括弧を含んだ計算をどう解釈するかという事を見るために以下の計算式を追ってみよう.

を考えよう.はじめの2はスタック0に記憶され,[×] [( ] [3] はスタック1に記憶される.そして,開き括弧の意味は一種の「ストッパー」である.この段階では開き括弧はその位置が記録されただけで,実質的な効果を及ぼさない.そして[+] [4] [ )]と閉じ括弧が入力されたとき電卓は「開き括弧の位置まで[=]キーと同様の計算を行え」と解釈する.この場合,3+4が計算され,スタック1に「7」が入る.そして,スタック1の内容が[×] [7]であることから,演算の優先順位の規則に従い自動的にスタック0との間の掛け算が実行される.

このようなアルゴリズムに従う計算機なら,括弧が開いたまま[=]を押しても困ることはない.スタックを上から順序よく計算するだけで,計算の優先順位を間違えることなく正常に終了できることがわかるだろう.

上の計算の場合,括弧の前の[×]もやはり「掛け算記号の省略」ルールに従い省略可能である.

「Natural display」のばあい,関数には自動的に開き括弧がくっついて現れる.これをいちいち閉じるのは面倒くさいが,たとえば[sin] [3] [0] のような単純な場合なら上の原理に従い省略は可能だ.しかし以下のような場合はSyntax Errorになる.

関数に必ず開き括弧が付随するこの仕様,便利さと不便さを天秤に掛けたらどちらが重くなるか.もう少し賢い処理方法があっても良いと思う.例えば,分数モードから抜けるときには閉じていない括弧を自動的に閉じるようなプログラムも可能だ.

メモリ代入時の省略

「数式通り」と「Natural display」にのみ使える技.演算結果をメモリに代入する際は,イコールキーの代わりにメモリ代入キーを使う.すると,入力した式を最後まで計算した結果が自動的にメモリーに代入される.

[1] [+] [1] [STO] [A]

メモリAに2が代入される.

多くの人が使っていないだろうこの方法だが,これはむしろメーカーが推奨するメモリー代入方法.マニュアルを見直してみよう.イコールキーで計算を閉じてからメモリーに代入するという,普通に考えられるやり方はむしろメーカーの想定外だったらしい.その証拠に,以前コラムで紹介したようなバグのある電卓が過去にはあった.

「標準電卓」にも似たような機能はあるが,こちらは[M+]キーでしか効かない.[STO]キー([x→M]キー)は,常に表示されている数値に対してのみ作用する.これでは有効性が半減だ.

知らなくても困らないが,知っているととても便利な関数電卓の裏技.幾つ知っていたかな?