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 source in the context
or the shared global source.

To produce a distribution with a different rate parameter, callers can adjust
the output using:

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 source in the context
or the shared global source.

To produce a distribution with a different rate parameter, callers can adjust
the output using:

type Rand interface {
// Int63 returns a non-negative pseudo-random 63-bit integer as an int64
// from the source in the context or the shared global source.Int63() int64// Uint32 returns a pseudo-random 32-bit value as a uint32 from the source in
// the context or the shared global source.Uint32() uint32// Int31 returns a non-negative pseudo-random 31-bit integer as an int32 from
// the source in the context or the shared global source.Int31() int32// Int returns a non-negative pseudo-random int from the source in the context
// or the shared global source.Int() int// Int63n returns, as an int64, a non-negative pseudo-random number in [0,n)
// from the source in the context or the shared global source.
//
// It panics if n <= 0.Int63n(n int64) int64// Int31n returns, as an int32, a non-negative pseudo-random number in [0,n)
// from the source in the context or the shared global source.
//
// It panics if n <= 0.Int31n(n int32) int32// Intn returns, as an int, a non-negative pseudo-random number in [0,n) from
// the source in the context or the shared global source.
//
// It panics if n <= 0.Intn(n int) int// Float64 returns, as a float64, a pseudo-random number in [0.0,1.0) from
// the source in the context or the shared global source.Float64() float64// Float32 returns, as a float32, a pseudo-random number in [0.0,1.0) from
// the source in the context or the shared global source.Float32() float32// Perm returns, as a slice of n ints, a pseudo-random permutation of the
// integers [0,n) from the source in the context or the shared global source.Perm(n int) []int// Read generates len(p) random bytes from the source in the context or
// the shared global source and writes them into p. It always returns len(p)
// and a nil error.Read(p []byte) (n int, err error)
// NormFloat64 returns a normally distributed float64 in the range
// [-math.MaxFloat64, +math.MaxFloat64] with standard normal distribution
// (mean = 0, stddev = 1) from the source in the context or the shared global
// source.
//
// To produce a different normal distribution, callers can adjust the output
// using:
//
// sample = NormFloat64(ctx) * desiredStdDev + desiredMean
//NormFloat64() 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 source in the context
// or the shared global source.
//
// To produce a distribution with a different rate parameter, callers can adjust
// the output using:
//
// sample = ExpFloat64(ctx) / desiredRateParameter
//ExpFloat64() float64// WithGoRand invokes the supplied "fn" while holding an exclusive lock
// for it. This can be used by callers to pull and use a *rand.Rand instance
// out of the Context safely.
//
// Other "mathrand" functions and objects MUST NOT BE USED inside the
// callback, as WithGoRand holds the lock to the current Rand instance, so any
// additional function call will deadlock.
//
// The callback's r must not be retained or used outside of hte scope of the
// callback.WithGoRand(fn func(r *rand.Rand) error) error
}

Rand is a random number generator interface.

A Rand instance is not necessarily safe for concurrent use. In order to
ensure that it is, wrap it in Locking or obtain it from a method that
provides this guarantee (e.g., Get).

All Rand functions MUST NOT PANIC. In particular, the Locking implementation
relies on embedded methods not panicking in order to release its lock, and
a panic will cause it to hold its lock indefinitely.

Get gets a Rand from the Context. The resulting Rand is safe for concurrent
use.

If one hasn't been set, this will return a global Rand object backed by a
shared rand.Rand singleton. Just like in "math/rand", rand.Seed can be called
prior to using Get to set the seed used by this singleton.