Ce face math.Erf
math.Erf(x) este funcția de eroare din statistică. Legată de distribuția normală (clopotul lui Gauss), ea dă probabilitatea ca o valoare să cadă într-un interval în jurul mediei. Rezultatul este între -1 și 1.
math.Erfc(x) este 1 - Erf(x), calculat precis chiar când rezultatul este foarte aproape de 0 (pentru x mare). math.Erfinv și math.Erfcinv (adăugate în Go 1.10) sunt funcțiile inverse.
Formula utilă: probabilitatea ca o valoare normală să fie sub x este 0.5 * (1 + Erf((x - medie) / (sigma * √2))).
Parametri
| Parametru | Descriere |
|---|---|
x |
Numărul de intrare (pentru inverse: între -1 și 1 la Erfinv, între 0 și 2 la Erfcinv). |
Ce returnează
Valoarea funcției, ca float64.
Exemple
Exemplul 1: Erf, Erfc și inversele
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("Erf(1) = %.4f\n", math.Erf(1))
fmt.Printf("Erfc(1) = %.4f\n", math.Erfc(1))
fmt.Printf("Erfinv(Erf(1)) = %.4f\n", math.Erfinv(math.Erf(1)))
fmt.Printf("Erfcinv(Erfc(1)) = %.4f\n", math.Erfcinv(math.Erfc(1)))
fmt.Println(math.Erfc(10))
}
Rezultat
Erf(1) = 0.8427
Erfc(1) = 0.1573
Erfinv(Erf(1)) = 1.0000
Erfcinv(Erfc(1)) = 1.0000
2.088487583762545e-45
Exemplul 2: Probabilitate la distribuția normală
Înălțimea elevilor dintr-o școală are media 165 cm și abaterea standard 10 cm. Ce procent are sub 180 cm?
package main
import (
"fmt"
"math"
)
func subValoare(x, medie, sigma float64) float64 {
return 0.5 * (1 + math.Erf((x-medie)/(sigma*math.Sqrt2)))
}
func main() {
fmt.Printf("Sub 180 cm: %.2f%%\n", 100*subValoare(180, 165, 10))
fmt.Printf("Între 155 și 175 cm: %.2f%%\n", 100*(subValoare(175, 165, 10)-subValoare(155, 165, 10)))
}
Rezultat
Sub 180 cm: 93.32%
Între 155 și 175 cm: 68.27%
Greșeli frecvente
- Calculezi
1 - math.Erf(x)pentruxmare și obții 0: foloseștemath.Erfc(x), care păstrează valorile mici.
Comenzi înrudite
math.Gamma: Funcția Gamma (factorialul extins la numere reale) și Lgamma, logaritmul ei, util pentru valori mari.math/rand/v2.NormFloat64: NormFloat64 dă numere cu distribuție normală (media 0, abaterea 1); ExpFloat64 dă numere cu distribuție exponențială (rata 1).