任意の底を持つ対数を計算する方法
多くのプログラミング言語では、任意の底を持つ対数を計算するために一工夫が必要だ。
PHP
PHPで任意の底の対数得るのは簡単だ。log関数を用いて次のように書く。第二引数を省略するとネイピア数(自然対数の底)eが底となる。
<?php // 底が2、真数が10の対数値。 $value = log(10.0, 2.0); ?>
しかし、このように書ける言語は少ない。
Java
JavaではMath.logメソッドもしくはMath.log10メソッドを使う。前者は自然対数(底はネイピア数e)、後者は常用対数(底は10)の値を返す。しかし、任意の底について計算をするようなメソッドは用意されていない。そこで、数学で習った対数の底の変換公式*1を用いて任意の底を持つ対数を計算する。
bは任意の底だ。この式を用いれば、任意の底を持つ対数も、自然対数や常用対数を用いて計算することができる。例えば、底が2で真数が10の対数を自然対数で書き換えると次のようになる。
これをJavaで書くと次のようになる。
// 底が2、真数が10の対数値。 double value = Math.log(10.0) / Math.log(2.0);
JavaScript
JavaScriptでは次のようになる。Javaと同じだ。
// 底が2、真数が10の対数値。 var value = Math.log(10.0) / Math.log(2.0);
C
せっかくなのでCの場合も。
#include <math.h> ... double value = log(10.0) / log(2.0);
結論: 多くの言語では対数の底の変換公式を使う必要がある
こうして見ると、多くの言語では任意の底を持つ対数を計算するためのメソッドや関数が用意されていないようだ*2。その場合は、対数の底の変換公式を用いることで任意の底を持つ対数を計算できる。