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
Float64câ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ă.