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 在 算法
每月 3,891 次下载
145KB
2K SLoC
rand_simple
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分布