#随机 #概率分布 #数字

rand_simple

一个独立于其他库的简单随机数生成器,基于XOR移位

78 次发布

0.2.30 2024年7月7日
0.2.28 2024年5月10日
0.2.26 2024年3月23日
0.2.23 2023年12月29日
0.1.11 2023年7月28日

#202算法

Download history 125/week @ 2024-05-07 13/week @ 2024-05-14 13/week @ 2024-05-21 129/week @ 2024-06-11 288/week @ 2024-07-02 51/week @ 2024-07-09

每月 3,891 次下载

MIT/Apache

145KB
2K SLoC

rand_simple

Crate

rand_simple 是一个基于 Xorshift160 算法的 Rust 包,用于高效生成伪随机数。它具有以下关键特性

  • Xorshift160 算法:rand_simple 利用经过验证的 Xorshift160 算法创建高质量的伪随机数。

  • 丰富的概率分布:该包旨在实现超过 40 种概率分布的随机数,如 Yotsuji Tetsuaki 所著的《计算机模拟的確率分布亂数生成法》一书中的特性。这些分布涵盖了计算机模拟的广泛场景。

  • 方便使用各种结构体:通过简单的声明 use rand_simple::StructName;,您可以访问不同概率分布的各种结构体,轻松将随机性融入您的应用程序。

如果您正在寻找 Rust 中随机数生成的有效解决方案,rand_simple 是一个可靠的选择。快速高效地开始使用它,利用其用户友好的特性。

使用示例

有关基于图的示例,请参阅 此存储库

均匀分布

// Generate a single seed value for initializing the random number generator
let seed: u32 = rand_simple::generate_seeds!(1_usize)[0];

// Create a new instance of the Uniform distribution with the generated seed
let mut uniform = rand_simple::Uniform::new(seed);

// Check the default range of the uniform distribution and print it
assert_eq!(format!("{uniform}"), "Range (Closed Interval): [0, 1]");
println!("Returns a random number -> {}", uniform.sample());

// When changing the parameters of the random variable

// Define new minimum and maximum values for the uniform distribution
let min: f64 = -1_f64;
let max: f64 = 1_f64;

// Attempt to set the new parameters for the uniform distribution
let result: Result<(f64, f64), &str> = uniform.try_set_params(min, max);

// Check the updated range of the uniform distribution and print it
assert_eq!(format!("{uniform}"), "Range (Closed Interval): [-1, 1]");
println!("Returns a random number -> {}", uniform.sample());

正态分布

// Generate two seed values for initializing the random number generator
let seeds: [u32; 2_usize] = rand_simple::generate_seeds!(2_usize);

// Create a new instance of the Normal distribution with the generated seeds
let mut normal = rand_simple::Normal::new(seeds);

// Check the default parameters of the normal distribution (mean = 0, std deviation = 1) and print it
assert_eq!(format!("{normal}"), "N(Mean, Std^2) = N(0, 1^2)");
println!("Returns a random number -> {}", normal.sample());

// When changing the parameters of the random variable

// Define new mean and standard deviation values for the normal distribution
let mean: f64 = -3_f64;
let std: f64 = 2_f64;

// Attempt to set the new parameters for the normal distribution
let result: Result<(f64, f64), &str> = normal.try_set_params(mean, std);

// Check the updated parameters of the normal distribution and print it
assert_eq!(format!("{normal}"), "N(Mean, Std^2) = N(-3, 2^2)");
println!("Returns a random number -> {}", normal.sample());

实现状态

连续分布

  • 均匀分布
  • 3.1 正态分布
  • 3.2 半正态分布
  • 3.3 对数正态分布
  • 3.4柯西分布
    • 半柯西分布
  • 3.5 Lévy 分布
  • 3.6 指数分布
  • 3.7 拉普拉斯分布
    • 对数拉普拉斯分布
  • 3.8 Rayleigh 分布
  • 3.9 Weibull 分布
    • 反射 Weibull 分布
    • Fréchet 分布
  • 3.10 Gumbel 分布
  • 3.11伽玛分布
  • 3.12贝塔分布
  • 3.13狄利克雷分布
  • 3.14幂函数分布
  • 3.15指数幂分布
    • 半指数幂分布
  • 3.16 Erlang 分布
  • 3.17卡方分布
  • 3.18卡方分布
  • 3.19 F 分布
  • 3.20 t 分布
  • 3.21逆高斯分布
  • 3.22三角分布
  • 3.23帕累托分布
  • 3.24逻辑分布
  • 3.25双曲正弦分布
  • 3.26升余弦分布
  • 3.27反正弦分布
  • 3.28 von Mises 分布
  • 3.29非中心伽玛分布
  • 3.30非中心贝塔分布
  • 3.31非中心卡方分布
  • 3.32 非中心卡方分布
  • 3.33 非中心F分布
  • 3.34 非中心t分布
  • 3.35 普朗克分布

离散分布

  • 伯努利分布
  • 4.1 二项分布
  • 4.2 几何分布
  • 4.3 泊松分布
  • 4.4 超几何分布
  • 4.5 多项分布
  • 4.6 负二项分布
  • 4.7 负超几何分布
  • 4.8 对数级数分布
  • 4.9 Yule-Simon分布
  • 4.10 Zipf-Mandelbrot分布
  • 4.11 Zeta分布

无运行时依赖