每个循环迭代相同的随机数

编程入门 行业动态 更新时间:2024-10-26 13:34:59
本文介绍了每个循环迭代相同的随机数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个 for 循环运行15次,在每次迭代中 dh.setDoors() / p>

setDoors 是调用 srand(time(0)),那么每当需要一个随机数时,它将使用例如 carSetter = rand()%3 + 1 。或者,它可以使用 decider = rand()%2 + 1 。

现在,通常 decider 和 carSetter 以不同的方式使用,但我怀疑是一个问题,并打印出 carSetter 和决定器。这是出来的:

门1有车决定是2 门1有车决定者是2 门1有汽车决定者是2 门1有汽车决定者是2 门1有汽车决定者是2 etc ...

当我运行时,值'1'和'2'

由于循环运行了15次不同的时间,因此不应 carSetter code>和决定器每次迭代打印一个不同的随机数?

srand(time(0)),它按预期工作,但没有种子集,所以每次都是相同的随机数字序列,所以这可能是一个问题 c> 当你调用 srand(x)时,那么 x 的值确定在随后调用 rand()时返回的伪随机数的序列,完全依赖于 x 的值。

srand()在顶部:

{ srand(time(0)); x = rand(); y = rand(); }

,则会生成相同随机数序列对 time(0)返回的值。由于计算机速度快,你的循环可能在不到一秒钟内运行, time(0)每次通过循环返回相同的值。因此 x 和 y 将在每次迭代时都是相同的。

<相反,您通常只需在程序开始时调用 srand() 一次

srand(time(0)); while(...){ x = rand(); y = rand(); }

在上述情况下, x 和 y 在每次循环时都会有不同的值。

I have a for loop that runs 15 times, with dh.setDoors() in every iteration.

What setDoors does is call srand(time(0)), then whenever a random number is needed it'll use, for example, carSetter = rand()%3+1. Alternatively, it may use decider = rand()%2+1.

Now, normally decider and carSetter are used in a different ways, but I suspected a problem and made it print out carSetter and decider at every iteration. Here's what came out:

Door 1 has car Decider is 2 Door 1 has car Decider is 2 Door 1 has car Decider is 2 Door 1 has car Decider is 2 Door 1 has car Decider is 2 etc...

The values '1' and '2' change when I run it multiple times, but are still the same throughout the 15 times.

Since the loop is running 15 different times, shouldn't carSetter and decider print out a different random number every iteration?

When I don't have srand(time(0)), it works as expected, but there's no seed set, so it's the same sequence of "random" numbers each time, so it's probably a problem with the seed?

解决方案

When you call srand(x), then the value of x determines the sequence of pseudo-random numbers returned in following calls to rand(), depending entirely on the value of x.

When you're in a loop and call srand() at the top:

while (...) { srand(time(0)); x = rand(); y = rand(); }

then the same random number sequence is generated depending on the value that time(0) returns. Since computers are fast and your loop probably runs in less than a second, time(0) returns the same value each time through the loop. So x and y will be the same each iteration.

Instead, you only usually need to call srand() once at the start of your program:

srand(time(0)); while (...) { x = rand(); y = rand(); }

In the above case, x and y will have different values each time through the loop.

更多推荐

每个循环迭代相同的随机数

本文发布于:2023-11-08 08:04:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1568814.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:随机数   迭代

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!