Documentation ¶
Overview ¶
Package rand implements pseudo-random number generators.
Random numbers are generated by a Source. Top-level functions, such as Float64 and Int, use a default shared Source that produces a deterministic sequence of values each time a program is run. Use the Seed function to initialize the default Source if different behavior is required for each run. The default Source, a LockedSource, is safe for concurrent use by multiple goroutines, but Sources created by NewSource are not. However, Sources are small and it is reasonable to have a separate Source for each goroutine, seeded differently, to avoid locking.
For random numbers suitable for security-sensitive work, see the crypto/rand package.
Index ¶
- func Add64(x, y, carry uint64) (sum, carryOut uint64)
- func ExpFloat64() float64
- func Float32() float32
- func Float64() float64
- func Int() int
- func Int31() int32
- func Int31n(n int32) int32
- func Int63() int64
- func Int63n(n int64) int64
- func Intn(n int) int
- func Mul64(x, y uint64) (hi, lo uint64)
- func NormFloat64() float64
- func Perm(n int) []int
- func Read(p []byte) (n int, err error)
- func Seed(seed uint64)
- func Shuffle(n int, swap func(i, j int))
- func Uint32() uint32
- func Uint64() uint64
- type LockedSource
- type PCGSource
- type Rand
- func (r *Rand) ExpFloat64() float64
- func (r *Rand) Float32() float32
- func (r *Rand) Float64() float64
- func (r *Rand) Int() int
- func (r *Rand) Int31() int32
- func (r *Rand) Int31n(n int32) int32
- func (r *Rand) Int63() int64
- func (r *Rand) Int63n(n int64) int64
- func (r *Rand) Intn(n int) int
- func (r *Rand) NormFloat64() float64
- func (r *Rand) Perm(n int) []int
- func (r *Rand) Read(p []byte) (n int, err error)
- func (r *Rand) Seed(seed uint64)
- func (r *Rand) Shuffle(n int, swap func(i, j int))
- func (r *Rand) Uint32() uint32
- func (r *Rand) Uint64() uint64
- func (r *Rand) Uint64n(n uint64) uint64
- type Source
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Add64 ¶
Add64 returns the sum with carry of x, y and carry: sum = x + y + carry. The carry input must be 0 or 1; otherwise the behavior is undefined. The carryOut output is guaranteed to be 0 or 1.
func ExpFloat64 ¶
func ExpFloat64() float64
ExpFloat64 returns an exponentially distributed float64 in the range (0, +math.MaxFloat64] with an exponential distribution whose rate parameter (lambda) is 1 and whose mean is 1/lambda (1) from the default Source. To produce a distribution with a different rate parameter, callers can adjust the output using:
sample = ExpFloat64() / desiredRateParameter
func Float32 ¶
func Float32() float32
Float32 returns, as a float32, a pseudo-random number in [0.0,1.0) from the default Source.
func Float64 ¶
func Float64() float64
Float64 returns, as a float64, a pseudo-random number in [0.0,1.0) from the default Source.
func Int31 ¶
func Int31() int32
Int31 returns a non-negative pseudo-random 31-bit integer as an int32 from the default Source.
func Int31n ¶
Int31n returns, as an int32, a non-negative pseudo-random number in [0,n) from the default Source. It panics if n <= 0.
func Int63 ¶
func Int63() int64
Int63 returns a non-negative pseudo-random 63-bit integer as an int64 from the default Source.
func Int63n ¶
Int63n returns, as an int64, a non-negative pseudo-random number in [0,n) from the default Source. It panics if n <= 0.
func Intn ¶
Intn returns, as an int, a non-negative pseudo-random number in [0,n) from the default Source. It panics if n <= 0.
func Mul64 ¶
Mul64 returns the 128-bit product of x and y: (hi, lo) = x * y with the product bits' upper half returned in hi and the lower half returned in lo.
func NormFloat64 ¶
func NormFloat64() float64
NormFloat64 returns a normally distributed float64 in the range [-math.MaxFloat64, +math.MaxFloat64] with standard normal distribution (mean = 0, stddev = 1) from the default Source. To produce a different normal distribution, callers can adjust the output using:
sample = NormFloat64() * desiredStdDev + desiredMean
func Perm ¶
Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n) from the default Source.
func Read ¶
Read generates len(p) random bytes from the default Source and writes them into p. It always returns len(p) and a nil error. Read, unlike the Rand.Read method, is safe for concurrent use.
func Seed ¶
func Seed(seed uint64)
Seed uses the provided seed value to initialize the default Source to a deterministic state. If Seed is not called, the generator behaves as if seeded by Seed(1). Seed, unlike the Rand.Seed method, is safe for concurrent use.
func Shuffle ¶
Shuffle pseudo-randomizes the order of elements using the default Source. n is the number of elements. Shuffle panics if n < 0. swap swaps the elements with indexes i and j.
Types ¶
type LockedSource ¶
type LockedSource struct {
// contains filtered or unexported fields
}
LockedSource is an implementation of Source that is concurrency-safe. A Rand using a LockedSource is safe for concurrent use.
The zero value of LockedSource is valid, but should be seeded before use.
func (*LockedSource) Seed ¶
func (s *LockedSource) Seed(seed uint64)
func (*LockedSource) Uint64 ¶
func (s *LockedSource) Uint64() (n uint64)
type PCGSource ¶
type PCGSource struct {
// contains filtered or unexported fields
}
PCGSource is an implementation of a 64-bit permuted congruential generator as defined in
PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation Melissa E. O’Neill, Harvey Mudd College http://www.pcg-random.org/pdf/toms-oneill-pcg-family-v1.02.pdf
The generator here is the congruential generator PCG XSL RR 128/64 (LCG) as found in the software available at http://www.pcg-random.org/. It has period 2^128 with 128 bits of state, producing 64-bit values. Is state is represented by two uint64 words.
func (*PCGSource) MarshalBinary ¶
MarshalBinary returns the binary representation of the current state of the generator.
func (*PCGSource) Seed ¶
Seed uses the provided seed value to initialize the generator to a deterministic state.
func (*PCGSource) UnmarshalBinary ¶
UnmarshalBinary sets the state of the generator to the state represented in data.
type Rand ¶
type Rand struct {
// contains filtered or unexported fields
}
A Rand is a source of random numbers.
func (*Rand) ExpFloat64 ¶
ExpFloat64 returns an exponentially distributed float64 in the range (0, +math.MaxFloat64] with an exponential distribution whose rate parameter (lambda) is 1 and whose mean is 1/lambda (1). To produce a distribution with a different rate parameter, callers can adjust the output using:
sample = ExpFloat64() / desiredRateParameter
func (*Rand) Int31n ¶
Int31n returns, as an int32, a non-negative pseudo-random number in [0,n). It panics if n <= 0.
func (*Rand) Int63n ¶
Int63n returns, as an int64, a non-negative pseudo-random number in [0,n). It panics if n <= 0.
func (*Rand) Intn ¶
Intn returns, as an int, a non-negative pseudo-random number in [0,n). It panics if n <= 0.
func (*Rand) NormFloat64 ¶
NormFloat64 returns a normally distributed float64 in the range [-math.MaxFloat64, +math.MaxFloat64] with standard normal distribution (mean = 0, stddev = 1). To produce a different normal distribution, callers can adjust the output using:
sample = NormFloat64() * desiredStdDev + desiredMean
func (*Rand) Perm ¶
Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n).
func (*Rand) Read ¶
Read generates len(p) random bytes and writes them into p. It always returns len(p) and a nil error. Read should not be called concurrently with any other Rand method unless the underlying source is a LockedSource.
func (*Rand) Seed ¶
Seed uses the provided seed value to initialize the generator to a deterministic state. Seed should not be called concurrently with any other Rand method.
func (*Rand) Shuffle ¶
Shuffle pseudo-randomizes the order of elements. n is the number of elements. Shuffle panics if n < 0. swap swaps the elements with indexes i and j.