Rust
Генерация случайных чисел
Поиск…
Вступление
Rust имеет встроенную возможность обеспечения генерации случайных чисел через ящик rand . Будучи частью стандартной библиотеки Rust, функциональность ящика rand была разделена, чтобы ее развитие стабилизировалось отдельно от остальной части проекта Rust. В этом разделе рассказывается, как просто добавить ящик rand, затем генерировать и выводить случайное число в Rust.
замечания
Существует встроенная поддержка RNG, связанная с каждым потоком, хранящимся в локальном хранилище потоков. К этому RNG можно получить доступ через thread_rng
или использовать неявно через random
. Этот RNG обычно случайным образом высеивается из источника случайной системы операционной системы, например /dev/urandom
в Unix-системах, и автоматически генерируется из этого источника после генерации 32 KiB случайных данных.
Приложение, для которого требуется источник энтропии для криптографических целей, должно использовать OsRng
, который считывает случайность из источника, который предоставляет операционная система (например, /dev/urandom
в Unixes или CryptGenRandom()
в Windows). Другие генераторы случайных чисел, предоставленные этим модулем, не подходят для таких целей.
Создание двух случайных чисел с Rand
Во-первых, вам нужно добавить ящик в файл Cargo.toml в качестве зависимости.
[dependencies]
rand = "0.3"
Это доставит ящик rand
из ящиков.io . Затем добавьте это в свой корневой каталог.
extern crate rand;
Поскольку этот пример будет обеспечивать простой вывод через терминал, мы создадим основную функцию и напечатаем два случайно генерируемых номера на консоли. В этом примере будет создан кешированный локальный генератор случайных чисел. При создании нескольких значений это часто оказывается более эффективным.
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
if rng.gen() { // random bool
println!("i32: {}, u32: {}", rng.gen::<i32>(), rng.gen::<u32>())
}
}
Когда вы запускаете этот пример, вы должны увидеть следующий ответ в консоли.
$ cargo run
Running `target/debug/so`
i32: 1568599182, u32: 2222135793
Создание персонажей с Rand
Чтобы генерировать символы, вы можете использовать функцию генератора случайных чисел в потоке, random
.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
Для случайных или сингулярных запросов, например выше, это разумный эффективный метод. Однако, если вы собираетесь генерировать больше, чем несколько чисел, вы обнаружите, что кеширование генератора будет более эффективным.
В этом случае вы должны ожидать увидеть следующий результат.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')