【问题标题】:C rand() is not really random [duplicate]C rand() 并不是真正随机的[重复]
【发布时间】:2013-02-13 09:05:43
【问题描述】:

我正在开发一个应用程序。 我正在使用:

int rand_num = rand() % 100;

获取 0 到 99 之间的随机整数。 现在,假设我得到了 41,然后重新启动我的应用程序,它始终是 41。相同的序列一遍又一遍,这意味着它不是真正随机的。

有什么解决办法吗?

【问题讨论】:

    标签: c++ c random


    【解决方案1】:

    您必须在启动应用程序时调用srand(...)(通常使用time(0))来随机化种子。请注意,它是一个伪随机数生成器,即rand() 函数生成的值不是均匀分布的。

    【讨论】:

    • 我不太明白...有没有机会得到一个sniper,一些函数比如random(min, max);?我会很高兴的!
    • @Ariel 给定一个间隔,您可以通过执行rand() % (max-min) 并将其递增min 来生成一个伪随机数
    【解决方案2】:

    rand 生成一个伪随机数,是的。但是你可以设置种子。

    srand(time(NULL));
    int rand_num = rand() % 100;
    

    只设置一次种子。

    或者你可以使用<random>中的一种方法。

    【讨论】:

    • 似乎很有魅力。谢谢卢钦! :)
    【解决方案3】:

    正确。 rand() 返回一个伪随机数。从给定开始的顺序是确定性的。您可以使用 srand() 更改起点。

    【讨论】:

      【解决方案4】:

      使用以下内容:

      #include<time.h>
      
      srand(time(NULL));
      

      它会改变伪随机生成器的种子。

      欲了解更多信息,请参阅this

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        相关资源
        最近更新 更多