Subject: Re: about pseudo-random numbers
From: [email-masked] (Kimon Kontovasilis)

16 Jan 1998 14:39:52 -0800
Message-ID: <[email-masked]>
References: <Pine.LNX.3.96.980113114251.1703C-100000@pc66>
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
To: [email-masked] (Valter EOR Santos)
Cc: [email-masked]

> 
>   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
> <[email-masked]>
> 

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
"[email-masked]" with one line of text: "help".