From: mert0407 AT sable DOT ox DOT ac DOT uk (George Foot) Newsgroups: comp.os.msdos.djgpp Subject: Re: Random numbers... Date: Sat, 16 Aug 1997 21:21:04 GMT Organization: [posted via] Easynet Group PLC Lines: 53 Message-ID: <33f61681.535645@news.easynet.co.uk> References: <01bcaa71$4c08c200$0d5e4ec2 AT xyy> NNTP-Posting-Host: foot.easynet.co.uk To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk On 16 Aug 1997 18:29:34 GMT, "Zampelli Stéphane" wrote: >I still can't obtain truly random numbers with the srand(), random(), and >rand() functions, because, whatever the seed number i put in srand(), it is >_always the same results. > >What can i do about it ? #include #include #include int main (void) { int x; srand(time(NULL)); rand(); for (x = 0; x < 10; x++) printf("%d\n",rand()); return 0; } Explanation: time(NULL) returns a number derived from the system's clock. This will normally be different each time the code is executed. Passing this to srand as the seed will mean that to all intents and purposes each time your program is run a different pseudo-random sequence is issued. The dummy call to rand() is there to discard the first value, which is in fact equal to the value of time, and so is rather predictable. For further information on the time function type `info libc a time'. If you run this program twice very quickly (in the same second?) it will give the same sequence of numbers. In the unlikely event that this is a problem, you could do something more fancy like (untested, sorry, but you'll get the idea): void seed_rand() { int x,y; x = clock(); y = time(NULL); while (y==time(NULL)); srand(clock()-x+time(NULL)); } #including the appropriate headers of course. -- george DOT foot AT merton DOT oxford DOT ac DOT uk