如何在 C 中生成真正的随机数
开发需要生成随机数的应用程序时,例如在掷骰子游戏中,确保生成的数字真正随机并且不偏向某些值至关重要。
中提供的代码片段该问题使用 rand() 函数生成给定范围内的随机数。然而,从输出中观察到,重复生成相同的数字,表明缺乏随机性。
问题:
问题是由于使用模数引起的运算符 (%) 将随机数映射到特定范围。虽然这种方法可能看起来很方便,但它可能会引入偏差,具体取决于随机数生成器的实现。
解决方案:
解决此问题并在 C 中生成真正的随机数,建议使用 C 11 中引入的功能。以下代码演示了另一种方法:
#include <random> #include <iostream> int main() { std::random_device dev; std::mt19937 rng(dev()); std::uniform_int_distribution<std::mt19937::result_type> dist6(1, 6); // distribution in range [1, 6] std::cout << dist6(rng) << std::endl; }
在此代码中, std::random_device 类提供熵源来初始化 Mersenne Twister 随机数生成器 (std::mt19937)。 std::uniform_int_distribution 类在所需范围内创建一个分布对象(在本例中为 [1, 6])。
调用 dist6(rng) 时,会生成指定范围内的真正随机整数。通过采用这些 C 11 功能,开发人员可以实现更多随机性并避免应用程序中出现有偏差的结果。
以上是如何在 C 中生成真正的随机数:'rand()”足够吗?的详细内容。更多信息请关注PHP中文网其他相关文章!