60 lines
2.4 KiB
Go
60 lines
2.4 KiB
Go
// Пакет Go `math/rand` обеспечивает генерацию
|
||
// [псевдослучайных чисел](http://en.wikipedia.org/wiki/Pseudorandom_number_generator).
|
||
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"math/rand"
|
||
"time"
|
||
)
|
||
|
||
func main() {
|
||
|
||
// Например, `rand.Intn` вернет случайное `целое число` в
|
||
// диапазоне `0 <= n < 100`.
|
||
fmt.Print(rand.Intn(100), ",")
|
||
fmt.Print(rand.Intn(100))
|
||
fmt.Println()
|
||
|
||
// `rand.Float64` вернет `число с плавающей точкой` в присвоит
|
||
// его в `f`, где `f` будет в промежутке `0.0 <= f < 1.0`.
|
||
fmt.Println(rand.Float64())
|
||
|
||
// Этот способ может быть использован для генерации других
|
||
// случайных чисел с плавающей точкой в разных диапазонах,
|
||
// например для диапазона `5.0 <= f' < 10.0`.
|
||
fmt.Print((rand.Float64()*5)+5, ",")
|
||
fmt.Print((rand.Float64() * 5) + 5)
|
||
fmt.Println()
|
||
|
||
// Генератор чисел по умолчанию является детерминированным,
|
||
// поэтому по умолчанию он будет каждый раз генерировать
|
||
// одну и ту же последовательность чисел. Чтобы произвести
|
||
// различные последовательности, дайте ему `соль`(https://ru.wikipedia.org/wiki/Соль_(криптография)),
|
||
// которая изменяется. Обратите внимание, что это не
|
||
// безопасно использовать для генерации случайных чисел,
|
||
// которые вы намерены хранить в секрете, используйте
|
||
// `crypto/rand` для них.
|
||
s1 := rand.NewSource(time.Now().UnixNano())
|
||
r1 := rand.New(s1)
|
||
|
||
// Вызвать результат `rand.Rand` можно точно так же, как и
|
||
// функции в пакете `rand`.
|
||
fmt.Print(r1.Intn(100), ",")
|
||
fmt.Print(r1.Intn(100))
|
||
fmt.Println()
|
||
|
||
// Если вы используете одну и ту же соль для генерации
|
||
// чисел, то они будут совпадать.
|
||
s2 := rand.NewSource(42)
|
||
r2 := rand.New(s2)
|
||
fmt.Print(r2.Intn(100), ",")
|
||
fmt.Print(r2.Intn(100))
|
||
fmt.Println()
|
||
s3 := rand.NewSource(42)
|
||
r3 := rand.New(s3)
|
||
fmt.Print(r3.Intn(100), ",")
|
||
fmt.Print(r3.Intn(100))
|
||
}
|