Rand 与协作库
rand_core 提供核心 API
rand_core crate 定义给 RNGs 实现的核心的 traits 。
它作为单独的 crate 存在,具有两个目的:
- 提供定义和使用 RNGs 的最小 API
- 给 RNGs 的 trait 实现提供工具
RngCore, SeedableRng, CryptoRng traits 和 Error 类型
全部在这个 crate 中被定义,然后 重导出 到 rand crate 。
rand 主要的用户接口
rand crate 通过优化提供常用的随机数功能。这包括以下几个方面:
rngs模块提供一些方便的生成器distributions模块主要用来对随机值抽样seq模块主要用来从序列中抽样或者 打乱序列Rngtrait 提供一些方便生成随机值的方法random函数 可通过单次调来生成随机数
Feature flags
除了 常见的 feature flags , 以下方面也是可以配置的:
- 使用
small_rngfeature:开启SmallRng生成器 (Rand v0.7 之后默认关闭) - 使用
simd_supportfeature:开启试验性的生成 SIMD 值功能 (仅在 nightly Rust 中可用)
注意:关于 SIMD ,这个 flag 主要用于生成 SIMD 类型,而不进行优化。 不管有没有开启这个 flag ,SIMD 操作都可能会在 Rand 库内部有所使用,比如 在 ChaCha 生成器内部就地明确支持 SIMD 操作。
概率分布
rand crate 只实现了最常用的随机数分布:均匀分布和加权抽样。
对于其他的概率分布:
rand_distrcrate 提供了来自一系列分布的快速抽样功能, 包括 正态分布、二项分布、泊松分布、单位圆分布 等等。statrscrate 是 C# Math.NET 库的接口, 不仅实现了与rand_distr类似的分布(有些多有些少), 并且涵盖 PDF 和 CDF 函数,以及标准误、beta、gamma 和 logistic 等特殊函数, 以及一些实用的东西。(statrs并不属于 Rand 库)