rand()即使使用srand也不起作用(time(NULL))

时间:2014-01-21 00:45:46

标签: c++ random srand

所以我试图在函数内部生成随机整数,但它返回相同的数字。 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));
    }

1 个答案:

答案 0 :(得分:4)

srand(0);再次初始化随机数生成器 ,因此每次都会产生相同的结果......不要这样做。

使用time(NULL)进行调用的重点是提供随机种子。