log1p

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

log1p以一种即使 number 的值接近零也能保持精确的方式返回 log(1 + number)

描述

log1p(float $num): float

log1p() 返回 log(1 + num),以一种即使 num 的值接近零也能保持精确的方式计算。由于精度问题,在这种情况下的 log() 可能只返回 log(1)。

参数

num

要处理的参数

返回值

log(1 + num)

参见

  • expm1() - 以一种即使 number 的值接近零也能保持精确的方式返回 exp($num) - 1
  • log() - 自然对数
  • log10() - 以 10 为底的对数

添加注释

用户贡献的注释 1 个注释

匿名
21 年前
请注意,如果 PHP 编译的 C 库没有内置支持 log1p() 函数,则此函数在小参数值方面的优势将会丧失。

在这种情况下,log1p() 将使用 log() 进行编译,结果的精度将与 log(1) 相同,也就是说,对于小数字,结果将始终为 0。
示例 log1p(1.0e-20)
- 如果 log1p() 用 log() 近似,则返回 0.0
- 如果底层 C 库支持 log1p(),则返回接近 1.0e-20 的值。

在任何平台上正确支持 log1p() 的一种方法,以便尊重预期结果的大小

function log1p($x) {
return ($x>-1.0e-8 && $x<1.0e-8) ? ($x - $x*$x/2) : log(1+$x);
}

如果您想要更高的精度,您可以使用更好的有限展开,用于 x 的小正值或负值

log(1+x) = x - x^2/2 + x^3/3 - ... + (-1)^(n-1)*x^n/n + ...

(此级数之和仅在 x 的值在 [0 ... 1](包含)内收敛,上述公式中的 ^ 运算符表示指数运算符,而不是 PHP 的异或运算符)

请注意,对于小于或等于 -1 的参数,log1p() 未定义,并且 log 函数的隐式底数为 Neperian "e" 常数。
To Top