math/rand/v2.NormFloat64 în Go

NormFloat64 dă numere cu distribuție normală (media 0, abaterea 1); ExpFloat64 dă numere cu distribuție exponențială (rata 1).

Sintaxă
import "math/rand/v2"

func NormFloat64() float64
func ExpFloat64() float64

Ce face math/rand/v2.NormFloat64

rand.NormFloat64() returnează numere după „clopotul lui Gauss”, cu media 0 și abaterea standard 1. Majoritatea valorilor sunt aproape de 0, iar valorile mari sunt rare. Pentru altă medie și abatere: medie + rand.NormFloat64()*abatere. Așa simulezi înălțimi, note sau erori de măsurare.

rand.ExpFloat64() returnează numere pozitive cu distribuție exponențială, cu rata 1 (media 1). Modelează timpul de așteptare între evenimente independente: clienți la o casă, apeluri la un call center. Pentru o medie m: rand.ExpFloat64() * m.

Ce returnează

Un float64 aleatoriu cu distribuția respectivă.

Exemple

Exemplul 1: Note simulate în jurul mediei 7.5

package main

import (
    "fmt"
    "math/rand/v2"
)

func main() {
    for range 5 {
        nota := 7.5 + rand.NormFloat64()*1.2
        fmt.Printf("%.2f\n", nota)
    }
}

Rezultat posibil (diferă la fiecare rulare)

6.96
8.55
5.57
8.55
8.49

Exemplul 2: Media și abaterea pe multe valori

Pe un milion de valori, media normalelor iese aproape de 0, iar cea a exponențialelor aproape de 1. Seed-ul fix face rezultatul reproductibil.

package main

import (
    "fmt"
    "math"
    "math/rand/v2"
)

func main() {
    r := rand.New(rand.NewPCG(3, 4))
    n := 1_000_000
    suma, sumaPatrate, sumaExp := 0.0, 0.0, 0.0
    for range n {
        x := r.NormFloat64()
        suma += x
        sumaPatrate += x * x
        sumaExp += r.ExpFloat64()
    }
    medie := suma / float64(n)
    fmt.Printf("normal: medie %.2f, abatere %.2f\n", medie, math.Sqrt(sumaPatrate/float64(n)-medie*medie))
    fmt.Printf("exponențial: medie %.2f\n", sumaExp/float64(n))
}

Rezultat

normal: medie -0.00, abatere 1.00
exponențial: medie 1.00

Greșeli frecvente

  • Folosești Float64 când datele reale au formă de clopot: valorile uniforme nu seamănă cu note sau înălțimi reale.

Comenzi înrudite

  • math/rand/v2.Float64: Returnează un număr zecimal aleatoriu uniform din intervalul [0.0, 1.0): Float64 sau Float32.
  • math.Erf: Funcția de eroare Erf, complementul ei Erfc = 1 – Erf și inversele Erfinv și Erfcinv, folosite la distribuția normală.