PHP log() 函数

定义和用法

log() 函数返回一个数的自然对数(以 e 为底)。如果指定了可选的 base 参数,则返回以该底数为底的对数。

提示:自然对数以常数 e 为底(约 2.71828182845904523536)。如需计算以 10 为底的对数,可使用 log10() 函数,或使用 log($num, 10)。相反的操作(指数)可以使用 exp() 函数。

语法

log(float $num, float $base = M_E): float
参数 描述
num 必需。规定要计算对数的值。必须为正数。
base 可选。规定对数底数。如果省略,默认使用自然对数(底数为 e)。

返回值

返回指定数的对数(浮点数)。如果 num 是负数或零,返回 NAN(非数字)。如果 base 是 1,也返回 NAN

PHP 版本

  • PHP 4+
  • PHP 5+
  • PHP 7+
  • PHP 8+

示例

示例 1:基本用法

<?php
echo log(1) . "<br>";      // 0
echo log(10) . "<br>";     // 约 2.302585092994 (自然对数)
echo log(100, 10) . "<br>"; // 2 (以10为底)
echo log(8, 2) . "<br>";   // 3 (以2为底)
?>

输出:

0
2.302585092994
2
3

示例 2:处理无效输入

<?php
$invalid = [-1, 0, 1, 10];
foreach ($invalid as $value) {
    $result = log($value, 10);
    if (is_nan($result)) {
        echo "log($value, 10) = NAN (无效输入)<br>";
    } else {
        echo "log($value, 10) = $result<br>";
    }
}
?>

输出:

log(-1, 10) = NAN (无效输入)
log(0, 10) = NAN (无效输入)
log(1, 10) = 0
log(10, 10) = 1

示例 3:实际应用 - 计算复利时间

<?php
// 计算在给定利率下,本金翻倍所需的时间(连续复利)
function doublingTime($rate) {
    return log(2) / log(1 + $rate);
}

$rate = 0.05; // 5% 年利率
$years = doublingTime($rate);
echo "年利率 $rate 下,本金翻倍约需 " . round($years, 2) . " 年";
?>

输出:

年利率 0.05 下,本金翻倍约需 14.21 年

相关函数

  • log10() - 以 10 为底的对数
  • exp() - 自然指数
  • pow() - 指数表达式
  • log1p() - 返回 log(1 + num),即使 num 接近 0 也能准确计算

注意事项

重要:
  • 参数 num 必须为正数。如果传入负数或零,函数返回 NAN(并可能产生警告)。
  • 如果 base 参数为 1,数学上无定义,函数返回 NAN
  • 由于浮点数精度限制,结果可能存在微小误差,但在大多数应用中可接受。
  • 传入非数值类型参数会导致警告(PHP 7+)或 TypeError(PHP 8+)。