Пакет rand
Обзор
Пакет rand реализует генераторы псевдослучайных чисел, подходящие для задач, таких как моделирование, но не следует использовать для работы, связанной с безопасностью.
Случайные числа генерируются с помощью источника, обычно обернутого в Rand. Оба типа должны использоваться одной горутиной за раз: совместное использование между несколькими горутинами требует некоторого вида синхронизации.
Функции верхнего уровня, такие как Float64 и Int, безопасны для одновременного использования несколькими горутинами.
Выходные данные этого пакета могут быть легко предсказуемыми независимо от способа инициализации. Для случайных чисел, подходящих для задач, связанных с безопасностью, см. пакет crypto/rand.
Пример
Код:
answers := []string{
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes definitely",
"You may rely on it",
"As I see it yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it",
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful",
}
fmt.Println("Magic 8-Ball says:", answers[rand.IntN(len(answers))])
Пример (Rand)
Этот пример демонстрирует использование каждого из методов на *Rand. Использование глобальных функций аналогично, без получателя.
Код:
// Create and seed the generator.
// Typically a non-fixed seed should be used, such as Uint64(), Uint64().
// Using a fixed seed will produce the same output on every run.
r := rand.New(rand.NewPCG(1, 2))
// The tabwriter here helps us generate aligned output.
w := tabwriter.NewWriter(os.Stdout, 1, 1, 1, ' ', 0)
defer w.Flush()
show := func(name string, v1, v2, v3 any) {
fmt.Fprintf(w, "%s\t%v\t%v\t%v\n", name, v1, v2, v3)
}
// Float32 and Float64 values are in [0, 1).
show("Float32", r.Float32(), r.Float32(), r.Float32())
show("Float64", r.Float64(), r.Float64(), r.Float64())
// ExpFloat64 values have an average of 1 but decay exponentially.
show("ExpFloat64", r.ExpFloat64(), r.ExpFloat64(), r.ExpFloat64())
// NormFloat64 values have an average of 0 and a standard deviation of 1.
show("NormFloat64", r.NormFloat64(), r.NormFloat64(), r.NormFloat64())
// Int32, Int64, and Uint32 generate values of the given width.
// The Int method (not shown) is like either Int32 or Int64
// depending on the size of 'int'.
show("Int32", r.Int32(), r.Int32(), r.Int32())
show("Int64", r.Int64(), r.Int64(), r.Int64())
show("Uint32", r.Uint32(), r.Uint32(), r.Uint32())
// IntN, Int32N, and Int64N limit their output to be < n.
// They do so more carefully than using r.Int()%n.
show("IntN(10)", r.IntN(10), r.IntN(10), r.IntN(10))
show("Int32N(10)", r.Int32N(10), r.Int32N(10), r.Int32N(10))
show("Int64N(10)", r.Int64N(10), r.Int64N(10), r.Int64N(10))
// Perm generates a random permutation of the numbers [0, n).
show("Perm", r.Perm(5), r.Perm(5), r.Perm(5))
Вывод:
Float32 0.95955694 0.8076733 0.8135684 Float64 0.4297927436037299 0.797802349388613 0.3883664855410056 ExpFloat64 0.43463410545541104 0.5513632046504593 0.7426404617374481 NormFloat64 -0.9303318111676635 -0.04750789419852852 0.22248301107582735 Int32 2020777787 260808523 851126509 Int64 5231057920893523323 4257872588489500903 158397175702351138 Uint32 314478343 1418758728 208955345 IntN(10) 6 2 0 Int32N(10) 3 7 7 Int64N(10) 8 9 4 Perm [0 3 1 4 2] [4 1 2 0 3] [4 3 2 0 1]
Индекс
Файлы пакета
chacha8.go exp.go normal.go pcg.go rand.go zipf.go
func ExpFloat64 1.22
func ExpFloat64() float64
ExpFloat64 возвращает float64 с экспоненциальным распределением в диапазоне (0, +math.MaxFloat64] с параметром скорости (лямбда) 1 и средним значением 1/лямбда (1) из стандартного источника. Чтобы получить распределение с другим параметром скорости, вызывающие функции могут скорректировать результат используя:
sample = ExpFloat64() / desiredRateParameter
func Float32 1.22
func Float32() float32
Float32 возвращает, как float32, псевдослучайное число в полуоткрытом интервале [0.0,1.0) из стандартного источника.
func Float64 1.22
func Float64() float64
Float64 возвращает, как float64, псевдослучайное число в полуоткрытом интервале [0.0,1.0) из стандартного источника.
func Int 1.22
func Int() int
Int возвращает неотрицательное псевдослучайное целое число int из стандартного источника.
func Int32 1.22
func Int32() int32
Int32 возвращает неотрицательное псевдослучайное 31-битное целое число как int32 из стандартного источника.
func Int32N 1.22
func Int32N(n int32) int32
Int32N возвращает, как int32, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n <= 0.
func Int64 1.22
func Int64() int64
Int64 возвращает неотрицательное псевдослучайное 63-битное целое число как int64 из стандартного источника.
func Int64N 1.22
func Int64N(n int64) int64
Int64N возвращает, как int64, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n <= 0.
func IntN 1.22
func IntN(n int) int
IntN возвращает, как int, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n <= 0.
Пример
Код:
fmt.Println(rand.IntN(100)) fmt.Println(rand.IntN(100)) fmt.Println(rand.IntN(100))
func N 1.22
func N[Int intType](n Int) Int
N возвращает псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Параметр типа Int может быть любым целочисленным типом. Вызывает панику, если n <= 0.
Пример
Код:
// Print an int64 in the half-open interval [0, 100). fmt.Println(rand.N(int64(100))) // Sleep for a random duration between 0 and 100 milliseconds. time.Sleep(rand.N(100 * time.Millisecond))
func NormFloat64 1.22
func NormFloat64() float64
NormFloat64 возвращает float64 с нормальным распределением в диапазоне [-math.MaxFloat64, +math.MaxFloat64] со стандартным нормальным распределением (среднее = 0, среднеквадратичное отклонение = 1) из стандартного источника. Чтобы получить другое нормальное распределение, вызывающие функции могут скорректировать результат используя:
sample = NormFloat64() * desiredStdDev + desiredMean
func Perm 1.22
func Perm(n int) []int
Perm возвращает, как срез n целых чисел, псевдослучайную перестановку целых чисел в полуоткрытом интервале [0,n) из стандартного источника.
Пример
Код:
for _, value := range rand.Perm(3) {
fmt.Println(value)
}
Вывод:
1 2 0
func Shuffle 1.22
func Shuffle(n int, swap func(i, j int))
Shuffle псевдослучайным образом меняет порядок элементов, используя стандартный источник. n — количество элементов. Shuffle вызывает панику, если n < 0. swap меняет местами элементы с индексами i и j.
Пример
Код:
words := strings.Fields("ink runs from the corners of my mouth")
rand.Shuffle(len(words), func(i, j int) {
words[i], words[j] = words[j], words[i]
})
fmt.Println(words)
Пример (SlicesInUnison)
Код:
numbers := []byte("12345")
letters := []byte("ABCDE")
// Shuffle numbers, swapping corresponding entries in letters at the same time.
rand.Shuffle(len(numbers), func(i, j int) {
numbers[i], numbers[j] = numbers[j], numbers[i]
letters[i], letters[j] = letters[j], letters[i]
})
for i := range numbers {
fmt.Printf("%c: %c\n", letters[i], numbers[i])
}
func Uint 1.23
func Uint() uint
Uint возвращает псевдослучайное uint из стандартного источника.
func Uint32 1.22
func Uint32() uint32
Uint32 возвращает псевдослучайное 32-битное значение как uint32 из стандартного источника.
func Uint32N 1.22
func Uint32N(n uint32) uint32
Uint32N возвращает, как uint32, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n == 0.
func Uint64 1.22
func Uint64() uint64
Uint64 возвращает псевдослучайное 64-битное значение как uint64 из стандартного источника.
func Uint64N 1.22
func Uint64N(n uint64) uint64
Uint64N возвращает, как uint64, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n == 0.
func UintN 1.22
func UintN(n uint) uint
UintN возвращает, как uint, псевдослучайное число в полуоткрытом интервале [0,n) из стандартного источника. Вызывает панику, если n == 0.
тип ChaCha8 1.22
ChaCha8 — это генератор криптографически сильных случайных чисел, основанный на ChaCha8.
type ChaCha8 struct {
// contains filtered or unexported fields
}
func NewChaCha8 1.22
func NewChaCha8(seed [32]byte) *ChaCha8
NewChaCha8 возвращает новый ChaCha8, инициализированный заданным значением.
func (*ChaCha8) AppendBinary 1.24
func (c *ChaCha8) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender.
func (*ChaCha8) MarshalBinary 1.22
func (c *ChaCha8) MarshalBinary() ([]byte, error)
MarshalBinary реализует интерфейс encoding.BinaryMarshaler.
func (*ChaCha8) Read 1.23
func (c *ChaCha8) Read(p []byte) (n int, err error)
Read считывает ровно len(p) байт в p. Он всегда возвращает len(p) и nil.
Если вызовы Read и Uint64 чередуются, порядок, в котором биты возвращаются этими двумя функциями, не определён, и Read может вернуть биты, сгенерированные до последнего вызова Uint64.
func (*ChaCha8) Seed 1.22
func (c *ChaCha8) Seed(seed [32]byte)
Seed сбрасывает ChaCha8, чтобы он работал так же, как NewChaCha8(seed).
func (*ChaCha8) Uint64 1.22
func (c *ChaCha8) Uint64() uint64
Uint64 возвращает равномерно распределённое случайное значение типа uint64.
func (*ChaCha8) UnmarshalBinary 1.22
func (c *ChaCha8) UnmarshalBinary(data []byte) error
UnmarshalBinary реализует интерфейс encoding.BinaryUnmarshaler.
type PCG 1.22
PCG — это генератор PCG с 128 битами внутреннего состояния. Нулевой PCG эквивалентен NewPCG(0, 0).
type PCG struct {
// contains filtered or unexported fields
}
func NewPCG 1.22
func NewPCG(seed1, seed2 uint64) *PCG
NewPCG возвращает новый PCG, инициализированный заданными значениями.
func (*PCG) AppendBinary 1.24
func (p *PCG) AppendBinary(b []byte) ([]byte, error)
AppendBinary реализует интерфейс encoding.BinaryAppender.
func (*PCG) MarshalBinary 1.22
func (p *PCG) MarshalBinary() ([]byte, error)
MarshalBinary реализует интерфейс encoding.BinaryMarshaler.
func (*PCG) Seed 1.22
func (p *PCG) Seed(seed1, seed2 uint64)
Seed сбрасывает PCG, чтобы он работал так же, как NewPCG(seed1, seed2).
func (*PCG) Uint64 1.22
func (p *PCG) Uint64() uint64
Uint64 возвращает равномерно распределённое случайное значение типа uint64.
func (*PCG) UnmarshalBinary 1.22
func (p *PCG) UnmarshalBinary(data []byte) error
UnmarshalBinary реализует интерфейс encoding.BinaryUnmarshaler.
type Rand 1.22
Rand — это источник случайных чисел.
type Rand struct {
// contains filtered or unexported fields
}
func New 1.22
func New(src Source) *Rand
New возвращает новый Rand, использующий случайные значения из src для генерации других случайных значений.
func (*Rand) ExpFloat64 1.22
func (r *Rand) ExpFloat64() float64
ExpFloat64 возвращает float64, распределённый экспоненциально в диапазоне (0, +math.MaxFloat64] с экспоненциальным распределением, параметр скорости (лямбда) которого равен 1, и среднее значение равно 1/лямбда (1). Чтобы получить распределение с другим параметром скорости, вызывающие функции могут настроить вывод, используя:
sample = ExpFloat64() / desiredRateParameter
func (*Rand) Float32 1.22
func (r *Rand) Float32() float32
Float32 возвращает псевдослучайное число типа float32 в полуоткрытом интервале [0.0,1.0).
func (*Rand) Float64 1.22
func (r *Rand) Float64() float64
Float64 возвращает псевдослучайное число типа float64 в полуоткрытом интервале [0.0,1.0).
func (*Rand) Int 1.22
func (r *Rand) Int() int
Int возвращает неотрицательное псевдослучайное целое число.
func (*Rand) Int32 1.22
func (r *Rand) Int32() int32
Int32 возвращает неотрицательное псевдослучайное 31-битное целое число как int32.
func (*Rand) Int32N 1.22
func (r *Rand) Int32N(n int32) int32
Int32N возвращает неотрицательное псевдослучайное число типа int32 в полуоткрытом интервале [0,n). Возвращает ошибку, если n ≤ 0.
func (*Rand) Int64 1.22
func (r *Rand) Int64() int64
Int64 возвращает неотрицательное псевдослучайное 63-битное целое число как int64.
func (*Rand) Int64N 1.22
func (r *Rand) Int64N(n int64) int64
Int64N возвращает неотрицательное псевдослучайное число типа int64 в полуоткрытом интервале [0,n). Возвращает ошибку, если n ≤ 0.
func (*Rand) IntN 1.22
func (r *Rand) IntN(n int) int
IntN возвращает неотрицательное псевдослучайное число типа int в полуоткрытом интервале [0,n). Возвращает ошибку, если n ≤ 0.
func (*Rand) NormFloat64 1.22
func (r *Rand) NormFloat64() float64
NormFloat64 возвращает float64, распределённый нормально в диапазоне от -math.MaxFloat64 до +math.MaxFloat64 включительно, со стандартным нормальным распределением (среднее = 0, стандартное отклонение = 1). Чтобы получить другое нормальное распределение, вызывающие функции могут настроить вывод, используя:
sample = NormFloat64() * desiredStdDev + desiredMean
func (*Rand) Perm 1.22
func (r *Rand) Perm(n int) []int
Perm возвращает срез из n целых чисел, представляющий случайную перестановку целых чисел в полуоткрытом интервале [0,n).
func (*Rand) Shuffle 1.22
func (r *Rand) Shuffle(n int, swap func(i, j int))
Shuffle случайным образом меняет порядок элементов. n — количество элементов. Shuffle генерирует ошибку, если n < 0. swap меняет местами элементы с индексами i и j.
func (*Rand) Uint 1.23
func (r *Rand) Uint() uint
Uint возвращает псевдослучайное значение типа uint.
func (*Rand) Uint32 1.22
func (r *Rand) Uint32() uint32
Uint32 возвращает псевдослучайное 32-битное значение как uint32.
func (*Rand) Uint32N 1.22
func (r *Rand) Uint32N(n uint32) uint32
Uint32N возвращает неотрицательное псевдослучайное число типа uint32 в полуоткрытом интервале [0,n). Возвращает ошибку, если n = 0.
func (*Rand) Uint64 1.22
func (r *Rand) Uint64() uint64
Uint64 возвращает псевдослучайное 64-битное значение как uint64.
func (*Rand) Uint64N 1.22
func (r *Rand) Uint64N(n uint64) uint64
Uint64N возвращает неотрицательное псевдослучайное число типа uint64 в полуоткрытом интервале [0,n). Возвращает ошибку, если n = 0.
func (*Rand) UintN 1.22
func (r *Rand) UintN(n uint) uint
UintN возвращает неотрицательное псевдослучайное число типа uint в полуоткрытом интервале [0,n). Возвращает ошибку, если n = 0.
type Source 1.22
Source — источник равномерно распределённых псевдослучайных значений типа uint64 в диапазоне [0, 1<<64).
Source не безопасен для одновременного использования несколькими горутинами.
type Source interface {
Uint64() uint64
} type Zipf 1.22
Zipf генерирует значения, распределённые по закону Зѝпфа.
type Zipf struct {
// contains filtered or unexported fields
}
func NewZipf 1.22
func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf
NewZipf возвращает генератор значений, распределённых по закону Зѝпфа. Генератор генерирует значения k ∈ [0, imax] такие, что P(k) пропорционально (v + k) ** (-s). Требования: s > 1 и v ≥ 1.
func (*Zipf) Uint64 1.22
func (z *Zipf) Uint64() uint64
Uint64 возвращает значение, взятое из распределения Зѝпфа, описанного объектом Zipf.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/math/rand/v2/