Функция math.Log1p

Функция math.Log1p вычисляет натуральный логарифм от суммы единицы и переданного числа x. Она эквивалентна выражению math.Log(1 + x), но обеспечивает более высокую точность, когда x близко к нулю. В таких случаях прямое вычисление может приводить к потере значащих цифр из-за ошибок округления при сложении. Функция принимает один параметр x типа float64 и возвращает значение того же типа. Особенности: при x = -1 функция возвращает -Inf, а при x < -1 — NaN.

Синтаксис

gomath.Log1p(x)

Пример

Давайте вычислим натуральный логарифм от 1.1, используя выражение 1 + 0.1:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Log1p(0.1)
  fmt.Println(res)
}

Результат выполнения кода:

go"0.09531017980432493"

Пример

Сравним точность math.Log1p и прямого вычисления math.Log(1 + x) для очень малого значения x = 1e-16:

gopackage 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)
}

Результат выполнения кода:

go"Log1p: 9.999999999999998e-17"
"Log:   0"

Пример

Рассмотрим работу функции с граничными значениями, передав -1 и -2:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  resMinusOne := math.Log1p(-1)
  resMinusTwo := math.Log1p(-2)
  fmt.Println("Log1p(-1):", resMinusOne)
  fmt.Println("Log1p(-2):", resMinusTwo)
}

Результат выполнения кода:

go"Log1p(-1): -Inf"
"Log1p(-2): NaN"

Смотрите также

  • функцию math.Log,
    которая вычисляет натуральный логарифм числа
  • функцию math.Log10,
    которая вычисляет десятичный логарифм числа
  • функцию math.Log2,
    которая вычисляет двоичный логарифм числа
  • функцию math.Expm1,
    которая вычисляет экспоненту минус единицу, обратную к math.Log1p