about pseudo-random numbers

Kimon Kontovasilis kkont@estia.iit.nrcps.ariadne-t.gr
Thu Jan 15 07:26:00 GMT 1998


> 
>   Hi!
>   I am a newby in this mailing list...
>   I am generate a program code that need random number generation...
>   My question is if there is any way to make a limit in the random
> generation. In the Turbo Borland C++ i have the unit random(int limit)
> that produces numbers between 0 and limit. In the gnu, or other linux
> compiler i only have the rand() or srand() units that produces numbers
> between 0 and a pre-defined random_limit variable MAX_RAND (or something
> like that). How i can generate code for resolving my problem???
> 
> _________________________
> Valter Santos
> <c9707059@cca.fc.up.pt>
> 

The following simple solution works in most cases and preserves the statistical
properties of the standard rand() up to double precision conversions.

	#include <stdlib.h>

	int range_rand(int limit)
	{
		return (((double) rand() / RAND_MAX) * limit);
	}

It is important to have the division performed in double precision *before*
multiplying by limit and returning as an integer.

As is, the routine will return values between 0 and limit-1 inclusive. Should
you want values from 1 to limit (or offset by any other number, for that
matter), save the expression returned above to an integer (or apply a cast)
and return the result plus the offset.

Initializing (or re-initializing) the seed, is obviously done with the
standard srand() routine.


Regards,

Kimon Kontovasilis.
-----------------------
Dr. Kimon Kontovasilis,
National Center for Scientific Research "Demokritos",
Inst. for Informatics & Telecommunications.
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".



More information about the Cygwin mailing list