Функция math.Log1p
Функция math.Log1p вычисляет натуральный логарифм от суммы единицы и переданного числа x.
Она эквивалентна выражению math.Log(1 + x), но обеспечивает более высокую точность,
когда x близко к нулю. В таких случаях прямое вычисление может приводить
к потере значащих цифр из-за ошибок округления при сложении. Функция принимает
один параметр x типа float64 и возвращает значение того же типа.
Особенности: при x = -1 функция возвращает -Inf,
а при x < -1 — NaN.
Синтаксис
math.Log1p(x)
Пример
Давайте вычислим натуральный логарифм от 1.1,
используя выражение 1 + 0.1:
package main
import (
"fmt"
"math"
)
func main() {
res := math.Log1p(0.1)
fmt.Println(res)
}
Результат выполнения кода:
"0.09531017980432493"
Пример
Сравним точность math.Log1p и прямого вычисления
math.Log(1 + x) для очень малого значения x = 1e-16:
package main
import (
"fmt"
"math"
)
func main() {
x := 1e-16
resLog1p := math.Log1p(x)
resLog := math.Log(1 + x)
fmt.Println("Log1p:", resLog1p)
fmt.Println("Log: ", resLog)
}
Результат выполнения кода:
"Log1p: 9.999999999999998e-17"
"Log: 0"
Пример
Рассмотрим работу функции с граничными значениями,
передав -1 и -2:
package main
import (
"fmt"
"math"
)
func main() {
resMinusOne := math.Log1p(-1)
resMinusTwo := math.Log1p(-2)
fmt.Println("Log1p(-1):", resMinusOne)
fmt.Println("Log1p(-2):", resMinusTwo)
}
Результат выполнения кода:
"Log1p(-1): -Inf"
"Log1p(-2): NaN"
Смотрите также
-
функцию
math.Log,
которая вычисляет натуральный логарифм числа -
функцию
math.Log10,
которая вычисляет десятичный логарифм числа -
функцию
math.Log2,
которая вычисляет двоичный логарифм числа -
функцию
math.Expm1,
которая вычисляет экспоненту минус единицу, обратную кmath.Log1p