【问题标题】:Random integers c++随机整数 c++
【发布时间】:2010-11-25 05:01:47
【问题描述】:

我正在尝试生成随机整数(均匀分布)。 我在另一个论坛上发现了这个 sn-p,但它的工作方式非常奇怪..

 srand(time(NULL));
    AB=rand() % 10+1;

使用这种方法,我会在一个循环中获取值,因此该值会随着每次调用而增加,直到它再次下降。我想这与将时间用作初始化程序有关吗? 这样的东西出来了。

 1 3 5 6 9 1 4 5 7 8 1 2 4 6 7.

然而,我想得到完全随机的数字,比如

1 9 1 3 8 2 1 7 6 7 5...

感谢您的帮助

【问题讨论】:

    标签: c++ integer random


    【解决方案1】:

    每个程序只能调用一次srand()

    【讨论】:

      【解决方案2】:

      还可以查看 Boost 随机数库:

      Boost Random Number Library

      【讨论】:

        【解决方案3】:
        • srand() 必须每次执行一次,而不是每次 rand() 调用一次,
        • 一些随机数生成器在使用“低位”时存在问题,并且存在偏差 如果你不放弃一些数字,可能会解决这两个问题:

          int alea(int n){ 
             assert (0 < n && n <= RAND_MAX); 
             int partSize = 
               n == RAND_MAX ? 1 : 1 + (RAND_MAX-n)/(n+1); 
             int maxUsefull = partSize * n + (partSize-1); 
             int draw; 
             do { 
                draw = rand(); 
             } while (draw > maxUsefull); 
             return draw/partSize; 
          }
          

        【讨论】:

          【解决方案4】:

          您可以使用 Park-Miller“最小标准”线性同余生成器 (LCG):(seed * 16807 mod(2^31 - 1))。我的实现在这里 Random integers with g++ 4.4.5

          C 语言'srand()' 函数用于设置'rand()' 使用的全局变量。当你需要一个随机数序列时,'rand()' 就足够了,但通常你需要几个随机数生成器。对于这些情况,我的建议是使用 C++ 和类似“rand31pmc”的类。

          如果您想生成小范围内的随机数,则可以使用此处提供的 Java 库实现: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt%28int%29

          【讨论】:

            猜你喜欢
            • 2020-07-16
            • 1970-01-01
            • 2011-06-26
            • 2018-11-06
            • 2015-09-07
            • 1970-01-01
            • 2011-12-08
            • 1970-01-01
            • 2015-01-27
            相关资源
            最近更新 更多