所以我试图在函数内部生成随机整数,但它返回相同的数字。 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));
}
答案 0 :(得分:4)
srand(0);
再次初始化随机数生成器 ,因此每次都会产生相同的结果......不要这样做。
使用time(NULL)
进行调用的重点是提供随机种子。