このライブラリは、疑似乱数を簡単に生成できるライブラリです。
例えば、use rand_simple::Uniform;
と宣言するだけで、一様分布乱数の構造体を使えるようになります。
偉大な先達randと比較して、簡素なモジュール宣言と豊富な確率変数による使いやすさを目指しています。
計算機シミュレーションのための確率分布乱数生成法/著者 四辻 哲章/プレアデス出版に掲載されている40種類以上の確率分布乱数と、その基礎である一様分布・ベルヌーイ分布を実装していきます。
基礎となるアルゴリズムはXorshift160で、たった5つの状態変数から周期 $2^{160} - 1$ 個の乱数計算を行うことができます。
1マイクロ秒毎に乱数を生成したとしても、ループが完了するまで$10^{34}$年かかるそうなので、ちょっとした乱数生成の範疇ではこれで十分だと考えています。
```rust let seed:u32 = 1192u32; let mut uniform = randsimple::Uniform::new(seed); println!("初期設定の場合、閉区間[0, 1]の一様乱数に従う乱数を返す -> {}", uniform.sample());
// 確率変数のパラメータを変更する場合 let min: f64 = -1f64; let max: f64 = 1f64; let result: Result<(f64, f64), &str> = uniform.trysetparams(min, max); println!("閉区間[{}, {}]の一様乱数を生成する -> {}", min, max, uniform.sample()); ```
```rust let seeds:[u32; 2usize] = [1192u32, 765u32]; let mut normal = randsimple::Normal::new(seeds); println!("初期設定の場合、平均値 μ = 0, 分散 σ^2 = 1 の標準正規分布乱数を生成する -> {}", normal.sample());
// 確率変数のパラメータを変更する場合 let mean: f64 = -3f64; let variance: f64 = 2f64; let result: Result<(f64, f64), &str> = normal.trysetparams(mean, variance); println!("平均値 μ = {}, 分散 σ^2 = {} の正規分布乱数を生成する -> {}", mean, variance, normal.sample()); ```
[ ] 3.35 プランク分布
[x] ベルヌーイ分布分布