有没有rand()以外的随机生成库,开发者可以手动设置seed?

Is there any random generator library except rand(), which developer can manually set the seed?

我想验证如果种子相同,则生成的伪随机数也相同。 使用 rand() 是最简单的,但我正在寻找更安全的方法。 我发现使用 /dev/random 或 linux 的设备熵非常可靠,但找不到如何设置完全相同的种子。 我也试过 window 的 cryptgenrandom 但找不到设置种子的方法。 我可以用那些使用设备的随机生成器制作手动种子吗? 或者是否有任何其他随机生成器库可以设置手动种子?

Is there any random generator library except rand(), which developer can manually set the seed?

是的。 有 许多 可用的随机数生成器(并且大多数是可播种的)并且它们都比 rand() 好(这是非常糟糕的)。不要在生产代码中使用 srand()/rand()

查看 <random> header。

我建议 std::mt19937 用于 non-cryptographic 目的(确保 正确地 播种,而不仅仅是单个 int) , 和 std::random_device 如果你需要原始熵(一定要检查你的实现是否正确地实现了它,标准 - 错误地恕我直言 - 允许它回落到 PRNG)。远离std::default_random_engine,你不知道它会给你什么

是的,<random> 允许这样做,切换到它是个好主意。 C++ 的 <random> 库是 far superior to <stdlib>'s rand() function, and allows you to 您应该将 <random> 用于您编写的任何生产代码。