【发布时间】:2022-01-20 07:50:56
【问题描述】:
我正在编写一个网络应用程序,它将进行一些财务模型模拟。只是为了好玩和学习新事物的机会,我决定将所有数学和模拟卸载到 WebAssembly 并在 Rust 中实现 wasm。
因此,我正在研究 Rust 的 PRNG。我找到了一个Mersenne Twister crate,而 MT 显然是一种成熟的算法(甚至在几种语言中默认使用),但是这个特定的 crate 似乎不是很受欢迎。我也知道 Rust 有一个 rand crate “内置”(如果这甚至是一件事),但我还没有找到任何信息:
-
rand使用的算法是什么? - 该算法在随机性质量方面与其他算法(例如 MT)相比如何?
明确一点:我正在评估统计随机性(模拟随机过程)的算法,不是加密安全性。
【问题讨论】:
-
randcrate 是开源的并且有很好的文档记录。包含的生成器上有一个页面:rust-random.github.io/book/guide-rngs.html -
如果您从链接到的页面开始并点击相应的链接,您将到达Struct rand::rngs::StdRng“当前使用的算法是 12 轮的 ChaCha 块密码。”我建议你确认我走的是正确的道路。
-
Re:算法,避免 MT。它臃肿并且不会产生很好的随机性。对于模拟,您几乎肯定想要 xoshiro 家族中的某些东西,例如
xoshiro256++。