PHP 日本研討會 2024

log1p

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

log1p 傳回 log(1 + 數字),即使當數字的值接近零時,也能精確計算

描述

log1p(float $num): float

log1p() 傳回 log(1 + num),即使當 num 的值接近零時,也能精確計算。log() 在這種情況下,可能由於缺乏精確度而只傳回 log(1)。

參數

num

要處理的引數

傳回值

log(1 + num)

參見

  • expm1() - 傳回 exp($num) - 1,即使當數字的值接近零時,也能精確計算
  • log() - 自然對數
  • log10() - 以 10 為底的對數

新增註解

使用者提供的註解 1 則註解

2
匿名
22 年前
請注意,如果 PHP 是針對不支援內建 log1p() 函式的 C 程式庫編譯的,則此函式對於小引數值的優勢會喪失。

在這種情況下,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 + ...

(此級數和僅對於 [0 ... 1](含)範圍內的 x 值收斂,且以上公式中的 ^ 運算子表示指數運算子,而不是 PHP xor 運算)

請注意,log1p() 對於小於或等於 -1 的引數是未定義的,且 log 函式的隱含底數是納皮爾常數 "e"。
To Top