21 个版本 (11 个破坏性更新)
使用旧的 Rust 2015
0.13.0 | 2021 年 2 月 2 日 |
---|---|
0.12.0 | 2020 年 10 月 13 日 |
0.11.1 | 2019 年 10 月 28 日 |
0.10.1 | 2018 年 12 月 12 日 |
0.3.2 | 2015 年 10 月 24 日 |
#326 在 算法 中
404 次每月下载
在 17 crates 中使用
60KB
1K SLoC
pcg_rand
要使用此库,请将以下内容添加到您的 Cargo.toml
pcg_rand = "0.13.0"
PCG 代表排列同余生成器。它们是一组使用被广泛谴责的线性同余生成器作为基础的简单随机数生成器。为了克服 LCG 生成器众所周知的限制,PCG 家族利用排列函数来排列输出。有关 PCG 的更多信息,请参阅此处。
当前状态
此库目前提供 32 位和 64 位生成器。它提供了主要的 "流" 类型,包括由它们在内存中的当前位置确定的唯一流。
未来工作
- 实现生成器的搜索功能
更改
- (2016 年 6 月 8 日):添加了对扩展生成器的支持。此实现基于我对论文中扩展指定的理解。我很乐意对实现进行代码审查。我认为这个特定的实现与 PCG C++ 版本中的实现不同。
- (2016 年 6 月 7 日):恢复了 0.5.0 中删除的一些宏。这是为了提高一些性能。希望相关的常数可以帮助我们再次删除它们,但现在删除 PcgConsts trait 可以提供额外的性能并减少间接引用。这也意味着现在实现新的流和乘数更容易,因为您不再受限于 PcgConsts 中的三个元素。
- (2018 年 7 月 31 日):记得更新 README(包括变更日志)。迁移到使用
rand: 0.5
crate,这涉及到新的方法。大多数函数现在不是基于宏,而是完全通用的,并利用num-traits
包装 trait 如需。此外,该 crate 现在支持使用本机的u128
,因为 Rust 现在已稳定支持。这使得最低 Rust 版本提升到 1.26。 - (2018年8月2日): 为
new_unseeded
函数提供了更好的默认设置,使其在测试中更有用。改进了文档,建议使用随机数生成器,并更新了文档示例,使用from_entropy
代替new_unseeded
,以促进生成器的良好使用。 - (2018年10月15日): 添加了对
u128
和实验性的serde1
支持的 cargo 特性。还修复了在0.9.2
中的一个问题,导致它只能在夜间使用(哎呀)。开始将基准测试迁移到 critereon。 - (2018年12月4日): 升级到
rand 0.6
和rand_core 0.3
。修复了在没有u128
支持的情况下测试无法运行的问题。Serde 支持仍然是高度实验性的。 - (2018年12月12日): 升级到 0.10.1,包括在 crates.io 上的 CI 构建徽章
- (2019年10月24日): 升级到 0.11.0,以使用
rand 0.7
和rand_core 0.5
- (2019年10月28日): 升级到 0.11.1。添加了使生成器输出其整个内部状态排列的能力。
- (2020年10月2日): 升级到 0.13.0。添加了提取生成器内部状态的能力。将示例从
bin
移到examples
,以便更好地发现。更改了序列化推导,只有将数据反序列化到SetSeq
类型才有意义,因此它是唯一支持反序列化的类型。序列化步骤将内部状态作为数组写入,不记录任何有关生成器类型的信息。 - (2020年10月12日): 添加了 DXsM 输出并将其设为默认(这是 C++ 库作者的指定意图)。重新设计了序列化,以创建一个包含验证 PCG 是否与其存储信息兼容所需的所有信息的定义结构。可以使用
no_deserialize_verify
功能来禁用此功能。
依赖关系
~420–750KB
~13K SLoC