- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The return value from first invocation of rand() seem correlates with the random seed value.
The value returned from first invocation of rand() after setting random seed by srand() changes only a 'little' from invocation to invocation. If a sequence of random number is generated rest values are ok.
Following program segment is compiled by Intel C++ v7.0 for win32, using VC++ 6.0, windows 2000sp3 and PIII 866.
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
int i;
for(i=0; i<10000; i++)
{
srand((unsigned int)time(0));
cout << rand() << setw(10) << rand() << setw(10) << rand() << setw(10) << rand() << endl;
}
return 0;
}
The value returned from first invocation of rand() after setting random seed by srand() changes only a 'little' from invocation to invocation. If a sequence of random number is generated rest values are ok.
Following program segment is compiled by Intel C++ v7.0 for win32, using VC++ 6.0, windows 2000sp3 and PIII 866.
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
int i;
for(i=0; i<10000; i++)
{
srand((unsigned int)time(0));
cout << rand() << setw(10) << rand() << setw(10) << rand() << setw(10) << rand() << endl;
}
return 0;
}
Link Copied
5 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
mishabear,
Welcome!
But I guess that I dont fully understand the question here...
Welcome!
But I guess that I dont fully understand the question here...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I write another program to demonstrate my problem. In the following program, a sequence of random number is generated. If a random number is bigger than half of RAND_MAX then a variable(K1) will be set otherwise another variable(K2) will be set. The program will not stop unless the sum of two variable(K1+K2) equlas to 2.
The program is expected to stop after runing a while, however this program does not stop actually.
I think this is a problem. I'm not sure who should be responsible for this problem, LIBC or compiler?
This program is complied by Intel VC 7.0 using VC 6.0 ,Win2KSp3 on PIII 866.
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
int K1=0, K2=0;
size_t t1, t2;
t1 = time(0);
cout << "t1 = " << t1 << endl;
for(; (K1 + K2) < 2; )
{
srand(time(0));
if(rand() > (RAND_MAX / 2))
K1 = 1;
else
K2 = 1;
}
t2 = time(0);
cout << "t2 = " << t2 << endl;
cout << "K1 = " << K1 << endl << "K2 = " << K2 << endl << "t2 - t1 = " << (t2 - t1) << endl;
return 0;
}
The program is expected to stop after runing a while, however this program does not stop actually.
I think this is a problem. I'm not sure who should be responsible for this problem, LIBC or compiler?
This program is complied by Intel VC 7.0 using VC 6.0 ,Win2KSp3 on PIII 866.
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
int K1=0, K2=0;
size_t t1, t2;
t1 = time(0);
cout << "t1 = " << t1 << endl;
for(; (K1 + K2) < 2; )
{
srand(time(0));
if(rand() > (RAND_MAX / 2))
K1 = 1;
else
K2 = 1;
}
t2 = time(0);
cout << "t2 = " << t2 << endl;
cout << "K1 = " << K1 << endl << "K2 = " << K2 << endl << "t2 - t1 = " << (t2 - t1) << endl;
return 0;
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It is unclear why you call srand repeatedly inside of the loop. Typically, you would call srand once say at the beginning of your program.
The rand function is a generator. If you call srand with a constant value, you should expect to see the same 'random' number sequence generated on repeated calls.
In your case, the random number sequence will change about once a second to coincide with your use of time(0) as the seed value.
If you move srand outside of the loop you should see better results.
Max
The rand function is a generator. If you call srand with a constant value, you should expect to see the same 'random' number sequence generated on repeated calls.
In your case, the random number sequence will change about once a second to coincide with your use of time(0) as the seed value.
If you move srand outside of the loop you should see better results.
Max
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks.
I see. It seems random generator must be 'warmed up' before put to use.
Is this a standard or implementation feature of random generator?
I see. It seems random generator must be 'warmed up' before put to use.
Is this a standard or implementation feature of random generator?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes. Do a search for random number generation on the web and you can get more details. Essentially the core of random number generation (used in drand()) relies upon a generator. I would bet that if you played with it a bit, you should find that your 'random number' sequence would repeat itself after generating a large number of random numbers.
Max
Max

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page