📜  rust 中的随机数生成器(1)

📅  最后修改于: 2023-12-03 14:47:10.557000             🧑  作者: Mango

Rust 中的随机数生成器

在 Rust 中,可以使用标准库中的 rand 模块来生成随机数。该模块提供了多个随机数生成器,以及对随机数进行扩展、转换和操作的方法。

生成器
线性同余生成器 (Linear Congruential Generator, LCG)

LCG 是一种使用数学运算生成随机数的算法。在 Rust 中,可以使用 LCG 类型生成随机数。使用 create_rng() 方法创建 LCG 类型实例,并使用 gen() 方法生成随机数。

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let random_number = rng.gen_range(1..101);
    println!("Random number: {}", random_number);
}

在上面的示例中,我们使用 thread_rng() 方法创建了一个新的随机数生成器,并使用 gen_range() 方法生成了一个范围在 1 到 100 之间的随机数。

XorShift 算法

XorShift 算法是一种快速的伪随机数生成算法,在 Rust 中,可以使用 XorShiftRng 类型生成随机数。与 LCG 类型一样,可以使用 create_rng() 方法创建 XorShiftRng 类型实例,并使用 gen() 方法生成随机数。

use rand::Rng;

fn main() {
    let mut rng = rand::XorShiftRng::create_rng();
    let random_number = rng.gen_range(1..101);
    println!("Random number: {}", random_number);
}

在上面的示例中,我们使用 create_rng() 方法创建一个新的 XorShiftRng 类型的随机数生成器,并使用 gen_range() 方法生成了一个范围在 1 到 100 之间的随机数。

梅森旋转算法 (Mersenne Twister)

梅森旋转算法是一种广泛使用的随机数生成算法,在 Rust 中,可以使用 StdRng 类型生成随机数。与 LCG 类型和 XorShiftRng 类型类似,可以使用 create_rng() 方法创建 StdRng 类型实例,并使用 gen() 方法生成随机数。

use rand::Rng;

fn main() {
    let mut rng = rand::StdRng::create_rng();
    let random_number = rng.gen_range(1..101);
    println!("Random number: {}", random_number);
}

在上面的示例中,我们使用 create_rng() 方法创建一个新的 StdRng 类型的随机数生成器,并使用 gen_range() 方法生成了一个范围在 1 到 100 之间的随机数。

扩展和操作
随机字节

除了生成随机数以外,rand 模块还可以生成随机字节。例如,可以使用 fill() 方法将随机的字节填充到指定的缓冲区中。

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let mut buffer = vec![0; 10];
    rng.fill(&mut buffer[..]);
    println!("Random bytes: {:?}", buffer);
}

在上面的示例中,我们使用 thread_rng() 方法创建一个新的随机数生成器,并使用 fill() 方法将 10 个随机字节填充到 buffer 缓冲区中。

随机数转换

除了生成随机数以外,rand 模块还支持将随机数从一种类型转换为另一种类型。例如,可以使用 gen_bool() 方法将生成的随机数转换为布尔值。

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let random_bool = rng.gen_bool(0.5);
    println!("Random bool: {}", random_bool);
}

在上面的示例中,我们使用 thread_rng() 方法创建一个新的随机数生成器,并使用 gen_bool() 方法将生成的随机数转换为布尔值。

总结

通过本文,我们了解了 Rust 中的随机数生成器以及如何使用随机数生成器生成随机数、随机字节、转换并操作随机数的方法。

生成器:LCGXorShiftRngStdRng
方法:gen(), gen_range(), fill(), gen_bool()

示例程序:rand_example.rs