#random #pcg #rand

dev pcg_rand

纯 Rust 实现的 PCG 家族随机数生成器

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算法

Download history 119/week @ 2024-04-23 93/week @ 2024-04-30 84/week @ 2024-05-07 173/week @ 2024-05-14 203/week @ 2024-05-21 219/week @ 2024-05-28 109/week @ 2024-06-04 70/week @ 2024-06-11 211/week @ 2024-06-18 68/week @ 2024-06-25 62/week @ 2024-07-02 84/week @ 2024-07-09 86/week @ 2024-07-16 114/week @ 2024-07-23 127/week @ 2024-07-30 62/week @ 2024-08-06

404 次每月下载
17 crates 中使用

Apache-2.0

60KB
1K SLoC

pcg_rand

Crates.io Version Build Status License

要使用此库,请将以下内容添加到您的 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.6rand_core 0.3。修复了在没有 u128 支持的情况下测试无法运行的问题。Serde 支持仍然是高度实验性的。
  • (2018年12月12日): 升级到 0.10.1,包括在 crates.io 上的 CI 构建徽章
  • (2019年10月24日): 升级到 0.11.0,以使用 rand 0.7rand_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