Calling srand() twice in the same program [closed]

一世执手 提交于 2019-12-07 13:41:27

问题


why is it when i call srand() at 2 very different points it cause numbers to not be random? Once i remove one of them it goes back to normal.


回答1:


It depends on how you call it. The purpose of srand() is to seed the pseudo-random number generator used by rand(). So when you call srand(i), it will initialise rand() to a fixed sequence which depends on i. So when you re-seed with the same seed, you start getting the same sequence.

The most common use case is to seed the generator just once, and with a suitable "random" value (such as the idiomatic time(NULL)). This guarantees makes it likely that you'll get different sequences of pseudo-random numbers in different program executions.

However, occasionally you might want to make the pseudo-random sequence "replayable." Imagine you're testing several sorting algorithms on random data. To get fair comparisons, you should test each algorithm on the exact same data - so you'll re-seed the generator with the same seed before each run.

In other words: if you want the numbers simply pseudo-random, seed once, and with a value as random as possible. If you want some control & replayability, seed as necessary.




回答2:


srand (seed);

Two different initializations with the same seed will generate the same succession of results in subsequent calls to rand.

If seed is set to 1, the generator is reinitialized to its initial value and produces the same values as before any call to rand or srand.

Each time rand() is seeded with srand(), it must produce the same sequence of values.

http://www.cplusplus.com/reference/cstdlib/srand/

http://en.cppreference.com/w/cpp/numeric/random/srand




回答3:


Are you initializing the srand? You have to initialize it in the beginning of you function/code like this:

srand(time(NULL));

It should work :)




回答4:


You may read about pseudo random numbers generators, standard library srand-rand functions are implementation of one of them. The core idea is that pseudo random generator is initialized with the special number - seed. srand() is used to set seed. For every seed pseudo random generator generate exactly the same sequence of numbers ever. By using different seeds you'll get different sequences of numbers. So if you want to get different random numbers everytime you start you program, you need everytime to set new seed. The one of simpliest way to do this is to use time for seed.

#include <time.h>

srand((unsigned int)time(0));


来源:https://stackoverflow.com/questions/21726414/calling-srand-twice-in-the-same-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!