Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
log() / log2() / log10() / exp()
対数関数と指数関数です。『<math.h>』に定義されており、情報理論・信号処理・科学計算など幅広い場面で使われます。コンパイル時に『-lm』リンクオプションが必要な場合があります。
構文
// 自然対数(底 e)を返します(x > 0 が必要です)。 double log(double x); // 2を底とする対数を返します(x > 0 が必要です。C99以降)。 double log2(double x); // 10を底とする常用対数を返します(x > 0 が必要です)。 double log10(double x); // e(ネイピア数)の x 乗を返します(e ≈ 2.71828)。 double exp(double x); // 2 の x 乗を返します(C99以降)。 double exp2(double x); // e^x - 1 を精度よく計算します(x が 0 に近いときに有効。C99以降)。 double expm1(double x);
関数一覧
| 関数 | 概要 | 例 |
|---|---|---|
| log() | 自然対数(ln x)を返します。 | log(M_E) → 1.0 |
| log2() | 2を底とする対数を返します。 | log2(8.0) → 3.0 |
| log10() | 常用対数(log₁₀ x)を返します。 | log10(1000.0) → 3.0 |
| exp() | e の x 乗(指数関数)を返します。 | exp(1.0) → 2.71828... |
| exp2() | 2 の x 乗を返します。 | exp2(10.0) → 1024.0 |
| expm1() | e^x - 1 を精度よく計算します。 | expm1(0.0001) ≈ 0.00010001 |
サンプルコード
#include <stdio.h>
#include <math.h>
int main(void) {
// log で自然対数を求めます。
printf("log(1.0) = %.6f\n", log(1.0)); // ln(1) = 0 が出力されます。
printf("log(M_E) = %.6f\n", log(M_E)); // ln(e) = 1 が出力されます。
printf("log(10.0) = %.6f\n", log(10.0)); // 2.302585... が出力されます。
// log2 でビット数の計算(2の何乗かを調べます)。
printf("log2(8.0) = %.1f\n", log2(8.0)); // 『3.0』と出力されます。
printf("log2(1024.0) = %.1f\n", log2(1024.0)); // 『10.0』と出力されます。
// log10 で桁数の計算(10の何乗かを調べます)。
printf("log10(100.0) = %.1f\n", log10(100.0)); // 『2.0』と出力されます。
printf("log10(1000.0) = %.1f\n", log10(1000.0)); // 『3.0』と出力されます。
// 任意の底 b の対数は log(x)/log(b) で計算します。
double x = 27.0, base = 3.0;
double log_base3 = log(x) / log(base);
printf("log3(27) = %.6f\n", log_base3); // 『3.000000』と出力されます。
// exp で指数関数を計算します(複利計算の例)。
double r = 0.05; // 年利 5%
double t = 10.0; // 10年
double growth = exp(r * t); // 連続複利の成長倍率
printf("10年後の倍率: %.4f 倍\n", growth); // 約 1.6487 倍が出力されます。
// exp と log は互いに逆関数です。
double val = 3.0;
printf("exp(log(3.0)) = %.6f\n", exp(log(val))); // 『3.000000』と出力されます。
return 0;
}
概要
C言語の『log()』は自然対数(底 e)です。数学の「log」が常用対数(底 10)を指す場合と異なるため注意が必要です。任意の底 b に対する対数を計算するには、底の変換公式『log_b(x) = log(x) / log(b)』を使います。
log()・log2()・log10() の引数に 0 以下の値を渡すと、それぞれ -HUGE_VAL(負の無限大相当)や NaN が返ります。引数が正であることを事前に確認してください。
『expm1()』は x が 0 に非常に近い場合に『exp(x) - 1』より精度よく計算できます。金融計算など、x が微小な場合の精度が重要な場面で使用してください。
べき乗(pow)や平方根については『sqrt() / pow()』、三角関数については『sin() / cos() / tan()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。