1234567891011121314151617181920212223242526272829 |
- package mathx
- import (
- "math/rand"
- "sync"
- "time"
- )
- // A Proba is used to test if true on given probability.
- type Proba struct {
- // rand.New(...) returns a non thread safe object
- r *rand.Rand
- lock sync.Mutex
- }
- // NewProba returns a Proba.
- func NewProba() *Proba {
- return &Proba{
- r: rand.New(rand.NewSource(time.Now().UnixNano())),
- }
- }
- // TrueOnProba checks if true on given probability.
- func (p *Proba) TrueOnProba(proba float64) (truth bool) {
- p.lock.Lock()
- truth = p.r.Float64() < proba
- p.lock.Unlock()
- return
- }
|