|
RandX 1.4.3
基于 xoshiro/xoroshiro 算法族的纯头文件伪随机数生成器库
|
基于 xoshiro/xoroshiro 算法族的纯头文件伪随机数生成器库。
原始算法:David Blackman & Sebastiano Vigna 原始 C++ 封装:Ryo Suzuki (Xoshiro-cpp)
⚠️ 安全声明
xoshiro / xoroshiro / SFC64 / RomuDuoJr / SplitMix64 引擎**均非 CSPRNG**,不可用于密码、密钥、会话 token 等安全场景。 安全场景请使用 ChaCha20 引擎(RFC 8439)或 **SecureRandomBytes()**。
| 头文件 | 标准 | 命名空间 | 说明 |
|---|---|---|---|
| RandX.hpp | C++23 | RandX | 增强版:concepts 约束、编译期随机、ranges 风格 API、多流接口 |
| RandX_Cpp17.hpp | C++17 | RandX | 兼容版:SFINAE 约束、便捷 API、7 引擎 |
两者算法实现完全一致,相同种子下输出序列相同。
完整 Doxygen API 参考:**https://lidaixingchen.github.io/RandX/**
本地生成:doxygen Doxyfile,输出到 docs/api/html/。
引擎
便捷 API
编译期
并行与状态
安全
播种
工程化
| 引擎 | 输出 | 周期 | 状态 | 适用场景 |
|---|---|---|---|---|
| Xoshiro256StarStar | 64-bit | 2^256-1 | 32B | 通用首选,统计质量最优 |
| Xoroshiro128StarStar | 64-bit | 2^128-1 | 16B | 内存受限,统计更优 |
| Xoshiro128StarStar | 32-bit | 2^128-1 | 16B | 32 位平台 |
| Xoroshiro64StarStar | 32-bit | 2^64-1 | 8B | 极端内存受限 |
| SplitMix64 | 64-bit | 2^64 | 8B | 种子扩展 / 哈希 |
| SFC64 | 64-bit | >= 2^64 | 32B | 速度极快,无 jump |
| RomuDuoJr | 64-bit | >= 2^51 | 16B | 极简极快,无 jump |
| ChaCha20 | 64-bit | 无周期 | 48B+ | **密码学安全**,RFC 8439 |
更多示例见 examples/ 目录(引擎管理、编译期随机、多流并行、ChaCha20、按权重选取)。
| 分类 | 函数 | 说明 |
|---|---|---|
| 基础生成 | RandInt(min, max) | [min, max] 闭区间整数 |
| RandReal(min, max) | [min, max) 浮点数 | |
| RandBool(p) | 概率 p 为 true | |
| RandChar(min, max) / RandChar(CharSet) | 随机字符 / 预设字符集 | |
| RandBits<N>() | N 位随机整数 | |
| 分布 | RandNormal RandExp RandPoisson RandGamma RandBeta RandBinomial RandBernoulli RandLogNormal RandGeometric RandCauchy RandWeibull RandExtremeValue RandChiSquared RandStudentT RandFisherF RandWeighted | 16 种标准统计分布 |
| 容器 | RandElement / RandSample / RandShuffle / RandPermutation / RandFill / RandVector | 容器版 + 迭代器版 |
| ranges | ranges::RandElement / RandSample / RandShuffle / RandFill | 仅 C++23 |
| 字符串 | RandString(len, charset) / RandUUID() | 随机字符串 / UUID v4 |
| 编译期 | RandIntCE<Seed>(min, max) / ShuffleCE / ShuffledArray | 仅 C++23 |
| 序列化 | serialize() / deserialize() / operator<< / operator>> | 状态持久化 |
| CSPRNG | ChaCha20() / reseed() / SecureRandomBytes() / SecureSeed() / IsOsCryptoEntropyAvailable() | 密码学安全 |
| 引擎控制 | jump() / longJump() / discard(n) / MakeStreamEngine / Reseed(seed) / RandomSeed() | 并行与播种 |
CharSet 枚举:Alphanumeric / Alpha / Lower / Upper / Digit / Hex / Printable / Base64 / Base64UrlSafe。 所有函数默认使用线程局部 Xoshiro256StarStar,也支持传入自定义引擎:RandInt(rng, min, max)。
完整签名与参数说明见 Doxygen API 参考。
| 场景 | 推荐 | 理由 |
|---|---|---|
| 模拟 / 游戏 / 蒙特卡洛 | Xoshiro256StarStar | 统计质量最优,速度极快 |
| 性能极致 / 非关键模拟 | SFC64 / RomuDuoJr | 更快,统计质量足够 |
| 并行子序列 | MakeStreamEngine + jump | 不重叠子序列 |
| 密码 / 密钥 / token | ChaCha20 或 SecureRandomBytes() | CSPRNG,状态不可逆推 |
核心判别:如果"输出可预测"会造成损害 → 必须用 CSPRNG;否则用统计 PRNG。 降级检测:IsOsCryptoEntropyAvailable() 返回 false 时表示走 std::random_device 兜底,非密码学安全。
维护者发布流程见 docs/RELEASING.md。
Windows 需链接 -lbcrypt;macOS 需 -framework Security;Linux 无需额外链接。使用 CMake 时自动处理。
CI 矩阵:GCC 14 / Clang 18 / MSVC (v145),覆盖 C++17 / C++20 / C++23。另有 PractRand nightly job 验证 8 引擎统计质量。
| 头文件 | 最低标准 | 推荐编译器 |
|---|---|---|
| RandX.hpp | C++23 | GCC 14+ / Clang 18+ / MSVC 17.10+ |
| RandX_Cpp17.hpp | C++17 | GCC 9+ / Clang 10+ / MSVC 16.8+ |
无外部依赖,纯头文件,复制即用。
完整版本演进见 CHANGELOG.md。