ln, log, log10
一般に、プログラミングにおいて、対数は三種類ある。自然対数と、常用対数と、一般の底の対数だ。問題は、それらの表し方について統一的な決まりがないことだ。
一般的な関数電卓では、ln
が自然対数を表し、log
が常用対数を表す。そして任意の底についての対数を直接に計算する機能はないことが多い。一方、プログラミングにおける各種ライブラリなどにおいては、log
が自然対数を表し、log10
が常用対数を表すことが多いような気がする。
というように、表記法が大まかに二つあるので、#Script においてはどうすべきか悩んでいる。
任意の底の対数については、log
という名前の関数に二つの引数を渡すという点においてはバライエティがなくても、底と真数のどちらを先にするかという順番の問題がある。
とりあえず、いくつかのプログラミング言語(のライブラリ)について、対数をどのように指定するか調べた結果が次の表だ。
| 名称 | 自然対数 | 常用対数 | 一般の対数 |
|---|---|---|---|
| Mathematica | Log[N] | - | Log[b,N] |
| C/C++ | log(N) | log10(N) | - |
| Java | log(N) | log10(N) | - |
| ECMAScript | log(N) | - | - |
| .NET Framework | Log(N) | Log10(N) | Log(N,b) |
| ActiveBasic | Log(N) | - | - |
| Delphi | Ln(N) | - | LogN(b,N) |
| FORTRAN | log(N) | log10(N) | - |
| Octave | log(N) | log10(N) | - |
| Perl | log N | - | - |
| Prolog | log(N) | - | log(b,N) |
| Python | log(N) | log10(N) | log(N,b) |
| Ruby | log(N) | log10(N) | - |
自然対数は全ての言語で使えて、Delphi 以外は全て ln ではなく log だ。常用対数が直接使えない言語は結構多い。底と真数を両方指定することができる言語もいくつかあるが、どちらの値を先に書くかはばらばらだ。
一方、簡易数式計算ソフトでは、対数の表し方は全く統一されていない。V-Tails/電卓ソフト比較/テキストエディタ電卓の[6.1]関数/定数の表記と入力
の表を見ると、log を自然対数とするものは 10 個、log を常用対数とするものは 14 個ある。ln と log の両方を自然対数とするものが一つ、log と log10 の両方を常用対数とするものが三つ、log を対数として使わない (つまり、ln と log10 のどちらかを使う) ものが三つ。
うーむ。#Script はプログラミング言語であるという観点から考えると、log が自然対数で log10 が常用対数というので決まりなのだが、#Calc は数式計算ソフトであるという観点から考えると、何とも言えないな。でも、exp の逆関数が log だ、という風に考えるならば、log を自然対数にするのが自然というか合理的だ。
ということで、log が自然対数で log10 が常用対数ということで決まり。常用対数の逆関数を定義するかどうかはもう少し検討を続ける。
| 固定リンク

コメント