47 lines
1023 B
Go
47 lines
1023 B
Go
package gen
|
|
|
|
import (
|
|
"math/rand"
|
|
)
|
|
|
|
type floatRandomValuesSequence struct {
|
|
r *rand.Rand
|
|
a float64
|
|
b float64
|
|
}
|
|
|
|
func NewFloatRandomValuesSequence(min, max float64, r *rand.Rand) FloatValuesSequence {
|
|
return &floatRandomValuesSequence{r: r, a: max - min, b: min}
|
|
}
|
|
|
|
func (g *floatRandomValuesSequence) Reset() {}
|
|
|
|
func (g *floatRandomValuesSequence) Write(vs []float64) {
|
|
var (
|
|
a = g.a
|
|
b = g.b
|
|
)
|
|
for i := 0; i < len(vs); i++ {
|
|
vs[i] = a*g.r.Float64() + b // ax + b
|
|
}
|
|
}
|
|
|
|
type integerRandomValuesSequence struct {
|
|
r *rand.Zipf
|
|
}
|
|
|
|
// NewIntegerZipfValuesSequence produces int64 values using a Zipfian distribution
|
|
// described by s.
|
|
func NewIntegerZipfValuesSequence(s *FieldIntegerZipfSource) IntegerValuesSequence {
|
|
r := rand.New(rand.NewSource(s.Seed))
|
|
return &integerRandomValuesSequence{r: rand.NewZipf(r, s.S, s.V, s.IMAX)}
|
|
}
|
|
|
|
func (g *integerRandomValuesSequence) Reset() {}
|
|
|
|
func (g *integerRandomValuesSequence) Write(vs []int64) {
|
|
for i := 0; i < len(vs); i++ {
|
|
vs[i] = int64(g.r.Uint64())
|
|
}
|
|
}
|