【发布时间】:2014-01-21 00:45:46
【问题描述】:
所以我试图在函数内部生成随机整数,但它返回相同的数字。 NUM_SOURCES == 5 并且对于所有 5 次重复它给出相同的数字,尽管 srand(time(0)) 被调用。我在没有std::的情况下尝试了同样的方法,但结果没有改变。
有什么建议吗?
std::srand(time(0)); //setting seed
...
for (int i = 0; i < NUM_SOURCES; i++)
{
if (sourceDeq->at(i)->getCurrentBid() == NULL) // If the source is empty, generate a new order
{
sourceDeq->at(i)->setCurrentBid(sourceDeq->at(i)->generateBid(systemTime));
}
}
...
Bid* Source::generateBid(int sysTime)
{
bidAmount = bidAmount + 1;
return new Bid(bidAmount, generateTimeCreation(sysTime), 0, 0, 0, getNumber());
}
...
int Source::generateTimeCreation(int sysTime)
{
srand(0);
if (sLaw == UNIFORM)
return (sysTime + std::rand() % 10);
if (sLaw == EXPONENTIAL)
return(sysTime + round((1 - exp(-(std::rand() % 100))) * 10));
}
【问题讨论】:
-
你能编辑你的代码,让它不会跑出窗口的右侧吗?
-
你打电话给
srand太频繁了。一次就够了。 -
PRNG 实际上并不是随机的。它们从种子开始并生成具有特定周期的数字序列。您通常提供种子一次,然后生成随机数,因为 PRNG 的状态会自行改变。通过使用相同的数字反复播种(您的代码可能在一毫秒内运行),您将始终获得相同的随机数序列。
-
您似乎可能在函数范围之外调用 srand(),您能澄清一下吗?