random - 如何在不引入偏差的情况下生成一个范围内的随机 Rust 整数?

标签 random rust

如何在 Rust 中生成随机掷骰子?

我知道我可以使用 rand::random ,但这需要我想生成一个整数类型的值。使用 rand::random<u8>() % 6引入偏差。

最佳答案

使用Rng::gen_range对于一次性值:

use rand::{self, Rng}; // 0.8.0

fn main() {
    let mut rng = rand::thread_rng();

    let die = rng.gen_range(1..=6);

    println!("The die was: {}", die);
}

在引擎盖下,这创建了一个 Uniform结构。如果您将获得多个随机数,请自行创建此结构:

use rand::{
    self,
    distributions::{Distribution, Uniform},
}; // 0.8.0

fn main() {
    let mut rng = rand::thread_rng();
    let die_range = Uniform::new_inclusive(1, 6);

    let die = die_range.sample(&mut rng);

    println!("{}", die);
}

Uniform 会进行一些预计算,以确定如何在不引入偏差的情况下将整个随机值范围映射到您想要的范围。它转换并调整您的原始范围以最接近地匹配随机数生成器的范围,丢弃任何落在这个新范围之外的随机数,然后调整大小并转换回原始范围。

另见:

关于random - 如何在不引入偏差的情况下生成一个范围内的随机 Rust 整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454677/

相关文章:

java - 我如何在 Java 中生成随机迷宫?

rust - 我怎样才能更好地记住何时使用哪种生命周期语法?

rust - 理解错误 "Borrowed value does not live long enough"

python - 如何生成整数的随机正态分布

javascript - 选择随机 <li> 元素

rust - Rust 中的左值上下文到底是什么?

rust - 无法使用完全限定的语法来装箱未大小的类型

rust - Rust 中元组的求值顺序是什么?

java - 使用 Random 作为 ArrayList 中的索引,如果之前使用过则不会移动

ios - Swift 中两位小数之间的随机数