math.Log în Go

Logaritmii din Go: Log (natural, baza e), Log10 (baza 10), Log2 (baza 2) și Log1p (ln(1+x) precis lângă 0).

Sintaxă
import "math"

func Log(x float64) float64
func Log10(x float64) float64
func Log2(x float64) float64
func Log1p(x float64) float64

Ce face math.Log

Logaritmul răspunde la întrebarea „la ce putere trebuie ridicată baza ca să obțin x?”. math.Log folosește baza e (logaritm natural, ln), math.Log10 baza 10, iar math.Log2 baza 2. math.Log10(1000) este 3, math.Log2(1024) este 10.

Pentru altă bază împarți doi logaritmi: logb(x) = math.Log(x) / math.Log(b).

math.Log1p(x) calculează ln(1 + x) precis când x este foarte mic. Cazuri speciale pentru toate: Log(0) dă -Inf, iar logaritmul unui număr negativ dă NaN.

Parametri

Parametru Descriere
x Numărul pozitiv al cărui logaritm îl calculezi (pentru Log1p: x > -1).

Ce returnează

Logaritmul, ca float64.

Exemple

Exemplul 1: Logaritmi în bazele obișnuite

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Printf("%.4f\n", math.Log(math.E))
    fmt.Printf("%.4f\n", math.Log(10))
    fmt.Println(math.Log10(1000))
    fmt.Println(math.Log2(1024))
    fmt.Println(math.Log(0), math.Log(-1))
}

Rezultat

1.0000
2.3026
3
10
-Inf NaN

Exemplul 2: Câte cifre are un număr și logaritm în altă bază

Un număr pozitiv n are floor(log10(n)) + 1 cifre. Logaritmul în baza 3 îl obții împărțind doi logaritmi naturali.

package main

import (
    "fmt"
    "math"
)

func main() {
    for _, n := range []float64{7, 2026, 1500000} {
        cifre := int(math.Floor(math.Log10(n))) + 1
        fmt.Printf("%.0f: %d cifre\n", n, cifre)
    }
    fmt.Printf("log3(81) = %.4f\n", math.Log(81)/math.Log(3))
}

Rezultat

7: 1 cifre
2026: 4 cifre
1500000: 7 cifre
log3(81) = 4.0000

Exemplul 3: Log1p pentru valori foarte mici

package main

import (
    "fmt"
    "math"
)

func main() {
    x := 1e-15
    fmt.Println(math.Log(1 + x))
    fmt.Println(math.Log1p(x))
}

Rezultat

1.110223024625156e-15
9.999999999999995e-16

Greșeli frecvente

  • Aștepți ca math.Log să fie în baza 10 (ca butonul „log” de pe calculator): în Go, Log este logaritmul natural. Pentru baza 10 folosește Log10.
  • Nu verifici datele: Log dintr-un număr ≤ 0 dă -Inf sau NaN, nu o eroare.

Comenzi înrudite

  • math.Exp: math.Exp calculează e la puterea x, math.Exp2 calculează 2 la puterea x, iar math.Expm1 calculează e^x – 1 precis.
  • math.Frexp: Funcții pentru exponentul binar al unui float64: Frexp îl desparte în mantisă și exponent, Ldexp le reunește, Logb și Ilogb dau exponentul.
  • math.Pow: math.Pow ridică x la puterea y, iar math.Pow10 calculează 10 la puterea n.