Функция rand.NormFloat64

Функция rand.NormFloat64 генерирует случайное число с нормальным распределением (также известным как распределение Гаусса). Она не принимает никаких параметров и возвращает значение типа float64. Генерируемые числа имеют среднее значение 0 и стандартное отклонение 1. Это означает, что большинство значений будут находиться в диапазоне от -3 до 3, при этом значения, близкие к 0, встречаются чаще, чем значения, удаленные от нуля.

Синтаксис

gorand.NormFloat64()

Пример

Давайте сгенерируем одно случайное число с нормальным распределением:

gopackage main

import (
  "fmt"
  "math/rand"
  "time"
)

func main() {
  rand.Seed(time.Now().UnixNano())
  res := rand.NormFloat64()
  fmt.Println(res)
}

Результат выполнения кода:

go"0.3854712856178512"

Пример

Давайте сгенерируем несколько случайных чисел с нормальным распределением и посмотрим на их распределение:

gopackage main

import (
  "fmt"
  "math/rand"
  "time"
)

func main() {
  rand.Seed(time.Now().UnixNano())
  
  for i := 0; i < 10; i++ {
    res := rand.NormFloat64()
    fmt.Println(res)
  }
}

Результат выполнения кода:

go"0.3854712856178512"
"-0.24657302191144077"
"1.2458615230453457"
"-0.5678123456789012"
"0.9234567890123456"
"-1.2345678901234567"
"0.4567890123456789"
"-0.7890123456789012"
"1.567890123456789"
"-0.3456789012345678"

Пример

Давайте используем rand.NormFloat64 для моделирования нормально распределенных значений с определенным средним и стандартным отклонением. Для этого мы умножаем результат на желаемое стандартное отклонение и прибавляем желаемое среднее:

gopackage main

import (
  "fmt"
  "math/rand"
  "time"
)

func main() {
  rand.Seed(time.Now().UnixNano())
  
  mean := 100.0
  stddev := 15.0
  
  for i := 0; i < 5; i++ {
    res := mean + stddev*rand.NormFloat64()
    fmt.Println(res)
  }
}

Результат выполнения кода:

go"105.45678901234567"
"98.34567890123456"
"112.56789012345678"
"95.67890123456789"
"102.34567890123456"

Смотрите также

  • функцию rand.Float64,
    которая генерирует равномерно распределенное число в диапазоне [0, 1)
  • функцию rand.ExpFloat64,
    которая генерирует число с экспоненциальным распределением
  • функцию rand.Intn,
    которая генерирует случайное целое число в диапазоне [0, n)
  • функцию rand.Perm,
    которая возвращает случайную перестановку чисел из диапазона [0, n)