수색…
소개
Rust에는 rand crate를 통한 난수 생성 기능이 내장되어 있습니다. Rust 표준 라이브러리의 일부였던 Rand 크레이트의 기능은 Rust 프로젝트의 나머지 부분과는 별도로 개발이 안정화되도록 분리되었습니다. 이 주제에서는 단순히 rand 크레이트를 추가 한 다음 Rust에서 임의의 숫자를 생성하여 출력하는 방법에 대해 설명합니다.
비고
스레드 로컬 저장소에 저장된 각 스레드와 연관된 RNG에 대한 기본 제공 지원이 있습니다. 이 RNG는 thread_rng
를 통해 액세스하거나 random
암시 적으로 사용할 수 있습니다. 이 RNG는 일반적으로 Unix 시스템에서 운영 체제 무작위성 소스 (예 : /dev/urandom
에서 무작위로 시드되며 32 Kb의 임의 데이터를 생성 한 후이 소스에서 자동으로 다시 시드됩니다.
암호화 목적으로 엔트로피 소스가 필요한 응용 프로그램은 운영 체제가 제공하는 소스 (예 : Unix에서는 /dev/urandom
, Windows에서는 CryptGenRandom()
에서 임의성을 읽는 OsRng
사용해야합니다. 이 모듈이 제공하는 다른 난수 생성기는 이러한 목적에 적합하지 않습니다.
RAND로 두 개의 난수 생성하기
먼저 크레이트를 종속물로 Cargo.toml 파일에 추가해야합니다.
[dependencies]
rand = "0.3"
그러면 crates.io 에서 rand
crate가 검색됩니다. 그런 다음이 상자를 크레이트 루트에 추가하십시오.
extern crate rand;
이 예제는 터미널을 통해 간단한 출력을 제공하기 때문에 main 함수를 만들고 무작위로 생성 된 두 개의 숫자를 콘솔에 출력합니다. 스레드 로컬 난수 생성기는이 예제에서 캐시됩니다. 여러 값을 생성 할 때 종종 더 효율적일 수 있습니다.
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로 문자 생성하기
문자를 생성하려면 thread-local 난수 생성기 함수를 random
있습니다.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
위와 같은 가끔 또는 단수의 요청의 경우 이는 합리적인 효율적인 방법입니다. 그러나 소수의 숫자를 생성하려는 경우 생성기가 더 효율적으로 캐싱되는 것을 확인할 수 있습니다.
이 경우 다음 출력을보아야합니다.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')