6 个版本 (稳定)

1.3.0 2021 年 3 月 18 日
1.2.0 2020 年 6 月 20 日
1.1.0 2020 年 6 月 16 日
1.0.1 2020 年 6 月 15 日
0.0.1 2020 年 6 月 14 日

#1366算法

Download history 7167/week @ 2024-01-05 7911/week @ 2024-01-12 4540/week @ 2024-01-19 2548/week @ 2024-01-26 528/week @ 2024-02-02 3141/week @ 2024-02-09 2089/week @ 2024-02-16 1047/week @ 2024-02-23 1160/week @ 2024-03-01 1804/week @ 2024-03-08 1431/week @ 2024-03-15 1377/week @ 2024-03-22 1115/week @ 2024-03-29 1235/week @ 2024-04-05 2457/week @ 2024-04-12 2527/week @ 2024-04-19

每月下载量 7,533
9 个包中使用 (3 直接)

MIT 许可证

27KB
732

simplerand

Latest Version Minimum rustc version

简单快速随机数生成器

动机

我开发了一个假数据生成器,它非常依赖于随机数生成。在 Rust 世界中,提供这种功能的包是 rand 包。这是一个很酷的包,如果你需要企业级的随机生成。但是,对于简单的假数据生成器来说,它太大了。不管怎样,生成一个随机数需要 400+ 微秒。(struggle)

因此,我创建了一个基于非常简单的种子机制的简单伪随机生成器。这不能用于加密随机生成!因此,它仅适用于需要简单快速解决方案的项目,如假数据生成器。这样,我可以在 ~200 纳秒 内生成随机数。

随机数生成强烈基于 线性同余生成器,因此如果你熟悉该算法,你可以想象它有多么简单。

用法

extern crate simplerand;

use simplerand::{randn, rand_range};

fn main() {
    let data = randn(10000);
    println!("data: {}", data); // output: something between 0 and 10000

    let data = rand_range(3000, 10000);
    println!("data: {}", data); // output: something between 3000 and 10000

    let generic_data = rand_range::<f32>(1000.123, 30000.123)
    println!("data: {}", generic_data);
}
使用 Randomable
extern crate simplerand;

use simplerand::{Randomable, rand_range};

fn main() {
    let generic_data = get_random_in_range::<u32>(10, 33);
    println!("data: {}", generic_data);
}

fn get_random_in_range<T: Randomable>(min: T, max: T) -> T {
    rand_range::<T>(min, max)
}
单例实现
#[macro_use]
extern crate lazy_static;
extern crate simplerand;

use std::sync::Mutex;

lazy_static! {
    static ref rand: Mutex<simplerand::Rng> = Mutex::new(simplerand::Rng::new());
}

fn main() {
    let number = RNG.lock().unwrap().rand_range(0, 10000); // output: something between 0 and 10000
}

rand 包

由于生成一个随机数需要 400 微秒,我认为这是因为种子机制。我想将 rand 的 ThreadRng 设置为我的声明之上的静态单例变量。我还使用了 lazy_static 来实现它,但它不是为了这个目的而设计的,因此我无法实现它。 (如果有人有解决方案,我很想看看。)

依赖项

~11KB