随机整数 c++

发布于 2024-08-04 07:03:59 字数 347 浏览 2 评论 0原文

我正在尝试生成随机整数(均匀分布)。 我在其他论坛上找到了这个片段,但它的工作方式非常奇怪。

 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...

感谢您的帮助

I'm trying to produce random integers (uniformly distributed).
I found this snippet on an other forum but it works in a very weird way..

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

Using this method I get values in a cycle so the value increases with every call until it goes down again. I guess this has something to do with using the time as aninitializer?
Something like this comes out.

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

I would however like to get totally random numbers like

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

Thanks for any help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

羁拥 2024-08-11 07:03:59

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

You should call srand() only once per program.

凹づ凸ル 2024-08-11 07:03:59

另请查看 Boost 随机数库:

Boost 随机数库< /a>

Also check out the Boost Random Number Library:

Boost Random Number Library

眼泪也成诗 2024-08-11 07:03:59
  • srand() 每次执行必须执行一次,而不是每次调用 rand() 一次,
  • 某些随机数生成器在使用“低位数字”时存在问题,并且存在偏差
    如果您不删除某些数字,则可以解决这两个问题:

    int alea(int n){ 
       断言 (0 < n && n <= RAND_MAX); 
       int 零件大小 = 
         n == 兰德_最大值? 1:1+(RAND_MAX-n)/(n+1); 
       int maxUsefull = 零件尺寸 * n + (零件尺寸-1); 
       绘制; 
       做 { 
          绘制=兰特(); 
       while (draw > maxUsefull); 
       返回绘图/partSize; 
    }
    
  • srand() has to be done once per execution, not once for each rand() call,
  • some random number generators have a problem with using "low digit", and there is a bias
    if you don't drop some number, a possible work around for both issues:

    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; 
    }
    
-小熊_ 2024-08-11 07:03:59

您可以使用 Park-Miller“最低标准”线性同余生成器 (LCG):(seed * 16807 mod(2^31 - 1))。我的实现在这里
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

You can use the the Park-Miller "minimal standard" Linear Congruential Generator (LCG): (seed * 16807 mod(2^31 - 1)). My implementation is here
Random integers with g++ 4.4.5

The C language 'srand()' function is used to set the global variable that 'rand()' uses. When you need a single sequence of random numbers, 'rand()' is more than enough, but oftentimes you need several random number generators. For those cases, my advice would be to use C++ and a class like 'rand31pmc'.

If you want to generate random numbers in a small range, then you can use the Java library implementation available here:
http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt%28int%29

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文