수색…


소개

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}')


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow