対数logの計算はそれほど登場するものではないだろう。
しかし、数値解析などでよく利用されるし、知っておいて損はない。
このページではJavaでの対数の出し方をまとめている。必要なタイミングで参考にして頂ければと思う。
目次
Javaの対数の求め方
対数を求めるとは,数値aのn乗がbだとするとaとbからnを求めることだ。例えば、「10」を底とする1000の対数といえば,「10」の「3」乗が「1000」なので「3」になる。これを、対数を求めるという。
Javaで対数を求めるためにはMathクラスのlogメソッドを利用する。
書き方の基本は簡単だ。
対数 = Math.log(対象となる数値)
ただし、底を何に設定するかで関数は変わる。Javaでの対数を求めるための書き方の詳細を確認していこう。
自然対数を求めるlogメソッド
logメソッドの基本
logメソッドは自然対数を求めるメソッドだ。ご存知の通り、自然対数とは「e」を底にしたときの対数のことである。
引数に指定した値から自然対数を求める。引数に指定できる値はdouble型のみだ。
log(double a)
戻り値の型 |
public static double |
内容 |
double値の自然対数(底:e)を戻す。 ■下記は特例となる
計算結果は,正確な結果の1ulp以内でなければならない。さらに,詳しい説明がJavaのドキュメントにある。 引数:a – aの値 戻り値:aの自然対数。 |
Javaで対数を求めるサンプルプログラム
それでは実際にサンプルプログラムを確認してみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class LogDouble { public static void main(String[] args) { double positiveValue1000 = 1000.0;//[1] double negativeValue1000 = -1000.0;//[2] double positiveZero = 0.0;//[3] double negativeZero = - 0.0;//[4] double positiveInfinity = Double.POSITIVE_INFINITY;//[5] double nanValue = Double.NaN;//[6] System.out.println("[7] 1000.0 の 自然対数: " + Math.log(positiveValue1000)); System.out.println("[8] -1000.0 の 自然対数: " + Math.log(negativeValue1000)); System.out.println("[9] NaN の 自然対数: " + Math.log(nanValue)); System.out.println("[10] 正の無限大 の 自然対数: " + Math.log(positiveInfinity)); System.out.println("[11] 正のゼロ の 自然対数: " + Math.log(positiveZero)); System.out.println("[12] 負のゼロ の 自然対数: " + Math.log(negativeZero)); } } |
実行結果
1 2 3 4 5 6 |
[7] 1000.0 の 自然対数: 6.907755278982137 [8] -1000.0 の 自然対数: NaN [9] NaN の 自然対数: NaN [10] 正の無限大 の 自然対数: Infinity [11] 正のゼロ の 自然対数: -Infinity [12] 負のゼロ の 自然対数: -Infinity |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
このプログラムは,扱うことのできる様々な値を持つ変数の対数を求めいている。
- [1] 1000.0を変数:positiveValue1000に設定する。
- [2] -1000.0を変数:negativeValue1000に設定する。
- [3] 正のゼロを変数:positiveZeroに設定する。
- [4] 負のゼロを変数:negativeZeroに設定する。
- [5] 正の無限大を変数:positiveInfinityに設定する。
- [6] NaNを変数:nanValueに設定する。
- [7] positiveValue1000の自然対数を表示する。
- [8] negativeValue1000の自然対数を表示する。
- [9] nanValueの自然対数を表示する。
- [10] positiveInfinityの自然対数を表示する。
- [11] positiveZeroの自然対数を表示する。
- [12] negativeZeroの自然対数を表示する。
常用対数を求めるlog10メソッド
log10メソッドの基本
log10メソッドの引数に指定した値から常用対数を求める。常用対数とは10を底にした対数だから、logの後に10がついた関数になっている。
引数に指定できる値はdouble型のみだ。
log10(double a)
戻り値の型 |
public static double |
内容 |
double値の常用対数(底:10)を戻す。 以下の点以外は,logと同じだ。 ■下記は特例となる ・引数が整数nで表した10のn乗に等しいなら,結果はnになる。 戻り値:aの常用対数。 から:1.5 |
Javaで常用対数を求めるサンプルプログラム
それでは実際にサンプルプログラムを確認してみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Log10Double { public static void main(String[] args) { double positiveValue1000 = 1000.0;//[1] double negativeValue1000 = -1000.0;//[2] double positiveZero = 0.0;//[3] double negativeZero = - 0.0;//[4] double positiveInfinity = Double.POSITIVE_INFINITY;//[5] double nanValue = Double.NaN;//[6] System.out.println("[7] 1000.0 の 常用対数: " + Math.log10(positiveValue1000)); System.out.println("[8] -1000.0 の 常用対数: " + Math.log10(negativeValue1000)); System.out.println("[9] NaN の 常用対数: " + Math.log10(nanValue)); System.out.println("[10] 正の無限大 の 常用対数: " + Math.log10(positiveInfinity)); System.out.println("[11] 正のゼロ の 常用対数: " + Math.log10(positiveZero)); System.out.println("[12] 負のゼロ の 常用対数: " + Math.log10(negativeZero)); } } |
実行結果
1 2 3 4 5 6 |
[7] 1000.0 の 常用対数: 3.0 [8] -1000.0 の 常用対数: NaN [9] NaN の 常用対数: NaN [10] 正の無限大 の 常用対数: Infinity [11] 正のゼロ の 常用対数: -Infinity [12] 負のゼロ の 常用対数: -Infinity |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
このプログラムは,扱うことのできる様々な値を持つ変数の常用対数を求めいている。
- [1] 1000.0を変数:positiveValue1000に設定する。
- [2] -1000.0を変数:negativeValue1000に設定する。
- [3] 正のゼロを変数:positiveZeroに設定する。
- [4] 負のゼロを変数:negativeZeroに設定する。
- [5] 正の無限大を変数:positiveInfinityに設定する。
- [6] NaNを変数:nanValueに設定する。
- [7] positiveValue1000の常用対数を表示する。
- [8] negativeValue1000の常用対数を表示する。
- [9] nanValueの常用対数を表示する。
- [10] positiveInfinityの常用対数を表示する。
- [11] positiveZeroの常用対数を表示する。
- [12] negativeZeroの常用対数を表示する。
引数に1を加えた値の自然対数を求めるlog1pメソッド
log1pメソッドの基本
log1pメソッドの引数に1を加えた値の自然対数を求める。1plusの意味だ。数学的には便利で、log(1.0+x) の浮動小数点評価よりも ln(1 + x) の実の結果に近くなる。
引数に指定できる値はdouble型のみだ。
log1p(double a)
戻り値の型 |
public static double |
内容 |
引数に1を加えた合計値の自然対数(底:e)を戻す。 ■下記は特例となる
戻り値:(a + 1)の自然対数。 後は,log10と同じだ。 |
Javaで引数+1の自然対数を求めるサンプルプログラム
それでは実際にサンプルプログラムを確認してみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Log1pDouble{ public static void main(String[] args) { double positiveValue1000 = 1000.0;//[1] double negativeValue1000 = -1000.0;//[2] double positiveZero = 0.0;//[3] double negativeZero = - 0.0;//[4] double positiveInfinity = Double.POSITIVE_INFINITY;//[5] double nanValue = Double.NaN;//[6] System.out.println("[7] 1000.0 の +1自然対数: " + Math.log1p(positiveValue1000)); System.out.println("[8] -1000.0 の +1自然対数: " + Math.log1p(negativeValue1000)); System.out.println("[9] NaN の +1自然対数: " + Math.log1p(nanValue)); System.out.println("[10] 正の無限大 の +1自然対数: " + Math.log1p(positiveInfinity)); System.out.println("[11] 正のゼロ の +1自然対数: " + Math.log1p(positiveZero)); System.out.println("[12] 負のゼロ の +1自然対数: " + Math.log1p(negativeZero)); } } |
実行結果
1 2 3 4 5 6 |
[7] 1000.0 の +1自然対数: 6.90875477931522 [8] -1000.0 の +1自然対数: NaN [9] NaN の +1自然対数: NaN [10] 正の無限大 の +1自然対数: Infinity [11] 正のゼロ の +1自然対数: 0.0 [12] 負のゼロ の +1自然対数: -0.0 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
このプログラムは,扱うことのできる様々な値を持つ変数に1を加えた自然対数を求めいている。
- [1] 1000.0を変数:positiveValue1000に設定する。
- [2] -1000.0を変数:negativeValue1000に設定する。
- [3] 正のゼロを変数:positiveZeroに設定する。
- [4] 負のゼロを変数:negativeZeroに設定する。
- [5] 正の無限大を変数:positiveInfinityに設定する。
- [6] NaNを変数:nanValueに設定する。
- [7] positiveValue1000の+1自然対数を表示する。
- [8] negativeValue1000の+1自然対数を表示する。
- [9] nanValueの+1自然対数を表示する。
- [10] positiveInfinityの+1自然対数を表示する。
- [11] positiveZeroの+1自然対数を表示する。
- [12] negativeZeroの+1自然対数を表示する。
その他の対数はどうやって求めるか?
任意の底を持つ対数を求めるためのメソッドはない。対数の底の変換公式を使って求めることになる。
例えば底が5、真数が20であれば次のようになる。
double value = Math.log(20.0) / Math.log(5.0);
まとめ
このページではJavaで対数logを求めるためのメソッドについてまとめてきた。いかがだっただろうか?
logメソッドだけを知っているだけでも十分だが、便利な他二つのメソッドもできれば掴んでおこう。