関数電卓再び

仕事で、ちょっと関数電卓があったら便利だな、という状況になったのですが、調べ始めたらいろいろ火がついてしまいそうで怖いです。


* * *


わたしは、いろんなものをコレクションしちゃう、片づけられないダメな子なのですが、関数電卓に思い入れはなかったので、あんまり持ってないのです。

もっとも hp-35s が発売された時は、それを喜び勇んで即買しちゃったのですが、それはもっぱら実用品としてではなくって、コレクションというか、アクセサリーというか、そういう意味で欲しかったのです。

というのも、RPNプログラミング言語好きにはたまらない入力方式ですし、パチッパチッとした打鍵感を持つ hp電卓キーボードは、入力機器マニアとしてもたまらないものでです。なので買ったはいいけど「電卓」の部分はともかく「関数」の部分はホンネではいらないかな?っという罰当たりな感じでした。

関数電卓」がいらなかった理由はシンプルで、いつも傍らにPC があるからです。

わたしは社会人になってから長らく 電卓は *scratch* バッファーを愛用しており、自席に居る限りは かならず Emacs / xyzzy が起動しているので、それで困りませんし、もちっと本格的にやるときは、Python で numpy とか で計算して matplotlib でグラフかいたりとかですね。お手軽に使うなら gnumeric とかとかもあります。

ところが、最近やたら仕事が数学じみてきて、仕様に数式が踊るようになってきました。そうすると、会議とかでちょっとした質問に答える時とか、電卓があれば便利だなぁ、と感じることが増えました。電卓なくても暗算ですらすら答えられればいいのですが、そんな技能はもってませぬ、しくしく。

というわけで、久方ぶりに学生時代に使っていた関数電卓を引っ張りだしてみました。――せっかく買った hp-35s を持って行ってもよいのですが、なくなったり壊したりしたら泣きそうですし、普通の四則計算ならまだしも、関数電卓としてすぐに使いこなす自信はなかったので...。あぁ、ほんとうにコレクターさんだなぁ。

わたしのかつての愛用電卓は、CASIO の fx-4800P です。ちょっとお高い関数電卓で、もうちょっと安いのでも用は足せたのですが、4桁のドットマトリクス液晶の見やすさが気に入ってのチョイスです。学生の時は、これを使って実験結果を見ながらやたら対数計算ばっかりやってましたよ、懐かしい。


発掘したときは、もうすっかりほこりをかぶっていて、まったく動かなかったのですが、通勤途中のコンビニで電池を買って会社で交換すると・・おぉ、動きました。ちょっと嬉し懐かしですね。


* * *


ところが、久しぶりに使ってみると、うーん、使い方がわからんっ!何もかもすっかり忘れています(^^;

ということで、使い方を調べようと仕事の合間に「関数電卓」で Webを徘徊。すると、なかなか濃ゆい良さげなページにたどり着きました。


http://teamcoil.sp.u-tokai.ac.jp/calculator/index.html


おぉ、凄いコレクションです。しかも作者は東海大学の教授さん。

コレクションのレビューも大変充実しているのですが、なにより「コラム」が面白くって、読みだすと「手元の fx-4800P だとどう動くんだろうと」気になってしかたありません。で、ポチポチと遊んでいるうちに、うん、だいたい使い方思い出してきた!・・・これは よいリハビリメニューですね。

そんなこんなで、めでたく目的は達成したのですが、このサイトを眺めていると、いろいろ関数電卓に興味がわいてきます。

例えば、これを買ったときには売り文句だった「数式通り入力」は今ではもう古い方式になっていて、今時の関数電卓ナチュラル入力とかいう、WYSIWYG な入力方式になっているとかとか。積分や分数など、ちゃんとした数式の項をカーソルキーで移動しながら埋めていけるそうな。

この「ナチュラル入力」はなかなか結構よろしいものだそうで、

私の関数電卓におけるポリシーの一つに「数値積分機能は不要」というのがある.これは,電卓という貧弱なユーザーインターフェースで,マニュアルを読まなくともできるような数値積分の入力方法は存在しないことと,電卓で入力出来るような問題なら解析解があるし,数値計算でなくては解けないような問題は電卓の手に余る(パソコンを使いなさい),という経験則から来ている.今回の問題も,fx-921ESが手元に無ければMathematicaを起動していたことだろう.しかし,結果として関数電卓を用いて非常に簡単に求める答を得ることが出来た.

どうやら,Natural Display機についてはポリシーを変更する必要がありそうだ.

Natural Display機で数値積分

むむむむむ。しかも、お勧めモデルが Amazon でたったの 1,480円で変えるとか。

カシオ 関数電卓 数学自然表示 394関数 10桁 fx-375ES-N ブラック

カシオ 関数電卓 数学自然表示 394関数 10桁 fx-375ES-N ブラック

やばい。これ以上関数電卓があったって仕方ないのに。手持ちので十分足りてるのに・・・、なんだか 凄く欲しくなってきます。うにゅー、このサイトは危険です。


また、今回実戦投入を見送った hp 35s ですが、RPN で hp な電卓という以外に、

という際立った特徴があることをはじめて知りました。オーナなのにこのていたらく...orz

さてこの電卓,機能的に最大の特徴は「複素数の関数が計算できる」ことではないだろうか.これは日本の電卓には無い素晴らしい機能.良く言われるのが「iのi乗」という計算だが,HPの計算機なら難なく0.207879576...と解答する.答は実数になるが,何故こうなるのかは各自で調べること.もちろん,三角関数や対数も複素数を引数に持てる.

HP 35s -関数電卓マニアの部屋

問題を「-2の1.5乗」としよう.

(中略)

国産の関数電卓で負数の実数乗が正しく計算できるものは無いが,私の手持ちではHP 35sが唯一それが可能な関数電卓である.ただしやり方は少々トリッキーだ.

(中略)

するとごらんの通り.

答えは「0.00000-2.82843i」(純虚数)となる.

HPの関数電卓はsinやlogなどの関数も引数に複素数が取れる優秀なものだが,一部の関数,例えばや√に負数を与えるとエラーとなる.確かに,実数も複素数に含まれるので,電卓のアルゴリズムを全て複素数で行うようにしてしまえばエラーは出ないかも知れない.どうしてこういう不便な仕様になっているのか,以下の理由と想像される.

関数電卓は全ての計算を有限桁の近似計算で行っている.全ての計算を複素数で行うと,本来実数体で閉じているはずの計算も,虚数成分にわずかな誤差が乗ってしまうのである.それを嫌って,引数に実数が与えられる限りにおいては,実数体で閉じない計算はエラーを返す仕様としているのではないだろうか.

http://teamcoil.sp.u-tokai.ac.jp/calculator/090907/index.html

ここ最近は 複素数に埋もれている感じなので、けっこうジュルリです。やっぱり職場に持って行こうかしら。(まぁ、複素三角関数なんてつかわないのですが)

なお、-2^1.5ですが、Mathematica でも 実数成分に誤差が乗ってしまって 実部が0にならないそうな。ほほー、Mathematica より 電卓のほうが良いパターンがあるのですか。

ためしにmy常用電卓の xyzyy で評価してみたら

(expt -2 1.5)
#C(3.372865e-8 -2.828427)

ふみゅ。実部が0にならない。(ちなみに Emacs だとdomain error)

もう一つの武器 Python ですと、普通の power (**演算子)の場合"ValueError: negative number cannot be raised to a fractional power" に。本気の numpy.power の場合、hp 35s と同じ「トリック」をつかって

>>> import numpy
>>> numpy.power(-2, 1.5+0j)
(-5.1957363374129602e-16-2.8284271247461903j)

になりましたにゃ(トリックを使わないとnan)。

こう比べると なにもしなくてもシレッと複素数返しちゃう xyzzy lisp は ステキかも。なにより、hp 35s ってどういうアルゴリズムで計算してるんかしら。

最近 LSI設計もちょっぴり片足つっこんでいる感じなので、「計算」をどのように実現するのか、好奇心がそそられます。その他構文解析ネタとか絡んだりなど、電卓はコンピュータサイエンスの縮図だなぁ、と今更ながら思ったり。

今度 FPGA で マイ電卓を作ってみたいなー。