あなたの log 関数は何ですか?

プログラミング言語などで log が常用対数(底は10)なのか自然対数(底はe)なのかという問題です。

TL;NR

ほとんどのプログラミング言語では log は自然対数、SQL はバラバラなので注意、Excel ワークシートでは常用対数

導入

 \log _{b} x b^{x}逆関数で、この b は底(てい)と呼ばれます。英語では base です。

底は 1 以外の正の数でなければなりませんが、実際に使われるのは 10, e, 2 くらいです。

x は正の数です。複素数にも拡大できますが、多価関数となりややこしくなりますので、ここでは止めておきます。

 \log _{10} は常用対数、 \log _{e} は自然対数と呼ばれます。

この e はネイピア数と呼ばれる定数で、定義は

 e = \lim\limits _{x \to 0} (1+x)^{\frac{1}{x}}

あるいは

 e = \lim\limits _{n \to \infty} (1+\frac{1}{n})^n

で、16桁の近似値は 2.718281828459045 (鮒一鉢二鉢一鉢二鉢至極美味しい)です。

"自然対数の底" という循環定義的な呼び方をされることも多いです。

10 や e の底はよく省略されます。省略されているとき、それが常用対数であるか、自然対数であるかは分野によります

常用対数を log で表したとき、自然対数は ln で表されます。

本題

ほとんどのプログラミング言語では log は自然対数です。FORTRAN, COBOL, Common Lisp, PL/I, C, VBA を確認しました。最近の言語は C に合わせているので、それらも同じです。

常用対数は log10 で用意されていることも、log(x, 10) が使用できる場合もあります。そうでないときでも底の変換公式

 \log _{a} b = \frac{\log _{c} b}{\log _{c} a}

により、log(x) / log(10.0) で計算できます。

例外的なのは Pascal で、自然対数が ln で用意されています。Pascal の先祖の Algol も同様のようです。

一方 Excel ワークシート関数では LOG(x,b) で b の省略時 10 となるため、LOG は常用対数に見えます。自然対数 LN も用意されています。google スプレッドシートでも同じでした。

SQL は統一されてません。注意してください。

  • Oracle SQL では LOG(b,x) で底が先です。
  • MS-SQL では LOG(x) が自然対数で、LOG(x,b) もあります。
  • MySQL では LOG は自然対数です。
  • SQLitePostgreSQL では LOG(x) が常用対数で、LOG(b,x) もあります。