Rust
Slumpmässig nummergenerering
Sök…
Introduktion
Rost har en inbyggd förmåga att tillhandahålla slumpvis talgenerering genom randlådan . När en del av Rust standardbibliotek, var funktionaliteten hos rand lådan separeras för att möjliggöra dess utveckling för att stabilisera separat till resten av Rust projektet. Detta ämne kommer att täcka hur man helt enkelt lägger till randlådan, sedan genererar och producerar ett slumpmässigt antal i Rust.
Anmärkningar
Det finns ett inbyggt stöd för en RNG associerad med varje tråd lagrad i tråd-lokal lagring. Denna RNG kan nås via thread_rng
eller användas implicit via random
. Denna RNG fröjas normalt slumpmässigt från en operativsystemskälla för slumpmässighet, t.ex. /dev/urandom
på Unix-system, och kommer automatiskt att resesera sig själv från denna källa efter att ha genererat 32 KiB slumpmässiga data.
En applikation som kräver en entropikälla för kryptografiska ändamål måste använda OsRng
, som läser slumpmässighet från källan som operativsystemet tillhandahåller (t.ex. /dev/urandom
på Unixes eller CryptGenRandom()
på Windows). De andra slumptalgeneratorerna som tillhandahålls av denna modul är inte lämpliga för sådana ändamål.
Generera två slumpmässiga nummer med Rand
Först måste du lägga till lådan i din Cargo.toml-fil som ett beroende.
[dependencies]
rand = "0.3"
Detta kommer att hämta rand
lådan från crates.io . Lägg sedan till detta i din låda rot.
extern crate rand;
Eftersom detta exempel kommer att ge en enkel utgång via terminalen, skapar vi en huvudfunktion och skriver ut två slumpmässigt genererade nummer till konsolen. Trådens lokala slumpmässig generator genereras i detta exempel. När man genererar flera värden kan det ofta visa sig vara mer effektivt.
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>())
}
}
När du kör detta exempel bör du se följande svar i konsolen.
$ cargo run
Running `target/debug/so`
i32: 1568599182, u32: 2222135793
Generera tecken med Rand
För att generera tecken kan du använda den tråd-lokala slumpnummergeneratorfunktionen, random
.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
För tillfälliga eller singulariska förfrågningar, som ovanstående, är detta en rimlig effektiv metod. Men om du tänker generera mer än en handfull nummer, kommer du att hitta cachning av generatorn som blir mer effektiv.
Du kan förvänta dig att se följande utdata i detta fall.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')