Spec-Zone.ru › Go

Пакет rand

  • import "math/rand/v2"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет 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]

Индекс

  • func ExpFloat64() float64
  • func Float32() float32
  • func Float64() float64
  • func Int() int
  • func Int32() int32
  • func Int32N(n int32) int32
  • func Int64() int64
  • func Int64N(n int64) int64
  • func IntN(n int) int
  • func N[Int intType](n Int) Int
  • func NormFloat64() float64
  • func Perm(n int) []int
  • func Shuffle(n int, swap func(i, j int))
  • func Uint() uint
  • func Uint32() uint32
  • func Uint32N(n uint32) uint32
  • func Uint64() uint64
  • func Uint64N(n uint64) uint64
  • func UintN(n uint) uint
  • тип ChaCha8
  • func NewChaCha8(seed [32]byte) *ChaCha8
  • func (c *ChaCha8) AppendBinary(b []byte) ([]byte, error)
  • func (c *ChaCha8) MarshalBinary() ([]byte, error)
  • func (c *ChaCha8) Read(p []byte) (n int, err error)
  • func (c *ChaCha8) Seed(seed [32]byte)
  • func (c *ChaCha8) Uint64() uint64
  • func (c *ChaCha8) UnmarshalBinary(data []byte) error
  • тип PCG
  • func NewPCG(seed1, seed2 uint64) *PCG
  • func (p *PCG) AppendBinary(b []byte) ([]byte, error)
  • func (p *PCG) MarshalBinary() ([]byte, error)
  • func (p *PCG) Seed(seed1, seed2 uint64)
  • func (p *PCG) Uint64() uint64
  • func (p *PCG) UnmarshalBinary(data []byte) error
  • тип Rand
  • func New(src Source) *Rand
  • func (r *Rand) ExpFloat64() float64
  • func (r *Rand) Float32() float32
  • func (r *Rand) Float64() float64
  • func (r *Rand) Int() int
  • func (r *Rand) Int32() int32
  • func (r *Rand) Int32N(n int32) int32
  • func (r *Rand) Int64() int64
  • func (r *Rand) Int64N(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) Shuffle(n int, swap func(i, j int))
  • func (r *Rand) Uint() uint
  • func (r *Rand) Uint32() uint32
  • func (r *Rand) Uint32N(n uint32) uint32
  • func (r *Rand) Uint64() uint64
  • func (r *Rand) Uint64N(n uint64) uint64
  • func (r *Rand) UintN(n uint) uint
  • тип Source
  • тип Zipf
  • func NewZipf(r *Rand, s float64, v float64, imax uint64) *Zipf
  • func (z *Zipf) Uint64() uint64

Примеры

Пакет
IntN
N
Perm
Shuffle
Shuffle (SlicesInUnison)
Пакет (Rand)

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API