指数と対数
計算を簡単にする野望
三角関数の研究が成熟していく時期の少し前、スコットランド人のジョン・ネピアが計算を簡単にしようと対数のアイデアを考えつきます。彼はどんな数でも必ずある数の何乗かで表わされることを尽き止めました。
例えば、30は10の1.477乗で表わされ、60は10の1.778乗で表わされます。
10 ≒ 30 10 ≒ 60
これをrpnで表現すると、以下のようになります。
29.9916
>rpn 10 1.778 p
59.9791
驚くことに、これらの指数である1.477と1.778を足した数の3.255を指数とする10の3.255乗は「30 * 60」の答えに等しいことが分かります。更に驚くことに、1.477から1.778を引いた数の-0.301を指数とする10の-0.301乗は「30 / 60」に等しいのです。式で表すと次のとおりです。
10 = 30 * 60 10 = ----
60
さて、上の説明の指数同士の和は、rpnだと以下のように表現できます。
1798.87
本来の答えは「30 * 60 = 1800」ですが、計算誤差が発生するから、ピッタリとはいきません(指数の精度を高めると限りなく1800に近づきます)。
指数の逆は対数
ところで、逆に30は10の何乗かをどのようにして求めるのでしょうか。それが「Log 30」です。式で表すと以下のとおりです。
Log 30 = 1.47712 10 = Log 30
この式はrpnでは、以下のように表現します。
1.47712
「j」は30が10の何乗かを求める関数です。前述の1.477はこのようにして求めた数の小数点4位以下を切り捨てた値でした。
ここまでで、Logと冪乗の関係が分かりましたが、もう一度、両者の関係を具体的な数字で示してみましょう。つまり、以下の数式が成り立つはずです。
10 = 30
rpnで、この等式の左辺を計算してみましょう。
30
この逆ポーランド式は「30のLogを出して10に冪乗する」と言い換えられます。
値の入れ替え
さて、b)の式で見慣れない記号「x」がありますが、これは「x」の1つ前と2つ前の計算結果を交換する操作記号で、「30 j」の計算値と「10」を交換することを示しています。
+----+
| |
v v
---- --
>rpn 30 j 10 x p
つまり、b)の式は「rpn 10 30 j p」と等価です。
「30のLogを出して10に冪乗する」という表現に、数式を合わせたかったので「x」を使いましたが、この「x」はrpnの逆ポーランド計算では多用するので、この機会に是非覚えておくといいでしょう。分かりやすいようにもっと簡単な例を示しておきますね。
0.5
>rpn 1 2 x /
2
「1 2 x」で1と2を交換していますから、結局「2 1 /」を計算していることになるのです。
学校では歴史的な背景を学ばずに「対数ありき」でLogを学びますが、そうすると対数の驚異を感じることができません。当時は大航海時代でしたが、天文学を使った膨大な計算が位置測量のために不可欠でした。ネピアは実に20年間もかけて対数表を完成させて、そのような計算に忙殺されることから解放してくれたのです。努力の賜物である対数は、人の耳で感じる音の大きさの変化が対数で表せたり、地震のエネルギーの大きさを対数で表したマグニチュードなど、何故か自然現象の説明に適しています。
『今回の問題』………………………………………………………………………
以下を逆ポーランド記法式に変換せよ。
(1) 計算結果が3.14となる10の冪乗値を求める式。
(2) 3.14の自乗を対数の計算で求める式((1)の冪乗値を利用のこと)。
(3) 数値の1から3までをスタックに積む式。
(4) 1から3までをスタックに積んで、最後に積んだ値とその前に積んだ
値を交換する式。
…………………………………………………………………………………………