数式のデバッグ数式のデバッグスタックを使いながら計算する電卓がrpnです。計算した結果は、最終的にスタックに残った値を表示するようになっています。1に2を足すと答えの3がスタックに残っているので、その3が表示されるわけです。+3簡単な数式ならよいのですが、複雑になってくるとスタックに積まれる数字も多くなります。rpnで計算していると以下のようなエラーも多発してきて、頭が混乱してきたりします。マイナスの対数を取っている:等々:例えば、rpn基礎の逆ポーランド記法のまとめにあるような複雑な数式の場合、rpn式に組み立てるのはちょっと大変です(再掲)。2.01このような数式でもrpnに慣れてくれば、一発でrpn式に変換できるのですが、確実にrpn式を作るにはどうすればよいのでしょうか。逆説的ですが、一番の方法は初めから間違いのないrpn式を書くことです。上の式を変形した小さな数式で試してみましょう。-0.32この数式をいくつかのパートに分けて考えます。この程度の式であれば、分子と分母に分けて考えればOKです。これなら簡単にrpn式になります。*-0.2784最後に分子を分母で割って、平方根を取って終了です。r5.99209式をまとめると次のようになります。r5.99209上掲の複雑な式なら、3つのパートに分けて考えると間違えずに、rpn式を組み立てられます。r4.54625大丈夫そうなら、式をまとめます。以下が全部一緒に書いたrpn式です。r4.57278微妙に値が違うのは数値計算の誤差です。複雑なrpn式のデバッグ初心忘するべからずで、数式を分解して考えるのもいいのですが、やはり慣れてくると一気にrpn式に変換していくことになります。その際にちょっとした手違いでうまく計算できないことが起こります。そんな時は、数式を分解する方法の延長線になるのですが、レジスタを使って計算すれば少しはスッキリします。2つ以上の数値を計算している部分(要は周りと比べて複雑な数式部分)をレジスタで置き換えます。7.46)の部分をレジスタで置き換えます。例ではレジスタaとレジスタbに計算値を格納しています。可能ならば以下のrpn式のように、先に計算しておいてもいいでしょう。数式ちょっと分かりやすくなりますね。頭の整理にもなります。ファイルに格納する方法もし、レジスタにする数式部分がとても長い数式の場合は一旦、ファイルに確保するのも方法です。r5.99209レジスタがファイルに変わっただけです。最後にpasteで横に結合して、再度レジスタに値を保存してから計算です。スタック値を確認する方法rpn式が分からなくなったら、このように数式を分解して再計算するのが基本なのですが、せっかく作ったrpn式を崩したくないという人もいます。数式をデバッグ(プログラムの虫取り)するような感覚ですね。そんな人には以下の方法がオススメです。スタック値を表示してくれる記号「`=」を使うことで、rpn式のデバッグがちょっと楽になります。以下の式で説明しましょう。-0.32普通にrpn式で表すと次のようになりましたね。r5.99209検算のため、分子の値をまず表示してみましょう。rpn式の分子の計算結果がスタックに詰まれたところに「`=」を挿入します。r-9.9965.99209最終的な答えの前に-9.996とあります。次に分母の値も同時に表示してみましょう。r-9.996-0.27845.99209分子と分母の値が出ていますね。それぞれの数字で割り算と平方根をとれば、答えが一致するはずです(計算誤差がなければ)。r5.99209きちんと合ってますね。この記号はスタック最上段にある値を表示するだけです。スタックに変更が及ばないことに注意してください(表示した値がスタックから削除されたりはしない)。スタック表示は再計算も可能なお、スタック値の表示で出力された数値は、今までと同様に再計算することができます。以下は計算の途中経過をスタック値で表示したものです。512345次は従来のスタック計算です。ともに同じ表示になっています。512345これらの計算結果を他のプログラムにそのまま引き渡すことができます。1から5までの合計を計算してみましょう。sum15上下段のrpn式のどちらも計算できていますね。デバッグ過程なら下段のrpn式でもよいのですが、記録に残すといった正式なものは上段のrpn式を使うべきです。「`=」はデバッグ用と割り切ってください。ちなみに「`$」を使えば、スタック値を表示した後に改行しないようにできます。スタック値を続けて表示したい場合に使用します。その意味では正式なrpn式をベースに数式を展開して、デバッグ時に「`=」を追加しながら確認するのを習慣にしたほうがいいでしょう。「`=」を消した後に再度、デバッグする堂々巡りは避けたいですからね。要は、以下のrpn式のように「`=」があってもなくても、計算結果が同じくなるようにデバッグするわけです。5そうすれば、デバッグの終了時に「`=」を消すだけで正式版になります。pasteは講座サポートで公開されています。・ビジネス計算は十八番!初めての人のrpn基礎もどうぞ。使えるdos入門もどうぞ。気楽に読めるrpn物語もどうぞ。※本講座のトップへ文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。rpn試用版と標準版(2kリビジョン)はダブルクォートで囲ってください。"foo"ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。TIPS」を参照ください。rpnの障害情報はこちら。rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。※ウェブサイトの内容を無断で複製、変更することは法律で禁じられています。